@strapi/review-workflows 5.50.0 → 5.50.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.
Files changed (87) hide show
  1. package/dist/admin/index.js +1 -0
  2. package/dist/admin/index.js.map +1 -1
  3. package/dist/admin/index.mjs +1 -0
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js +1 -1
  6. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.js.map +1 -1
  7. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs +1 -1
  8. package/dist/admin/routes/content-manager/model/components/AssigneeFilter.mjs.map +1 -1
  9. package/dist/admin/routes/content-manager/model/components/StageFilter.js.map +1 -1
  10. package/dist/admin/routes/content-manager/model/components/StageFilter.mjs.map +1 -1
  11. package/dist/admin/routes/settings/components/Stages.js +4 -3
  12. package/dist/admin/routes/settings/components/Stages.js.map +1 -1
  13. package/dist/admin/routes/settings/components/Stages.mjs +4 -3
  14. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -1
  15. package/dist/admin/routes/settings/components/WorkflowAttributes.js +2 -2
  16. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -1
  17. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +2 -2
  18. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -1
  19. package/dist/admin/src/routes/content-manager/model/constants.d.ts +2 -2
  20. package/dist/admin/src/routes/settings/components/Stages.d.ts +1 -1
  21. package/dist/admin/src/services/admin.d.ts +1 -1
  22. package/dist/admin/src/services/api.d.ts +1 -1
  23. package/dist/admin/src/services/content-manager.d.ts +8 -8
  24. package/dist/admin/src/services/settings.d.ts +1392 -1392
  25. package/dist/admin/src/utils/api.d.ts +2 -2
  26. package/dist/admin/src/utils/cm-hooks.d.ts +2 -2
  27. package/dist/admin/translations/ko.json.js +41 -0
  28. package/dist/admin/translations/ko.json.js.map +1 -0
  29. package/dist/admin/translations/ko.json.mjs +39 -0
  30. package/dist/admin/translations/ko.json.mjs.map +1 -0
  31. package/dist/admin/translations/pl.json.js +34 -1
  32. package/dist/admin/translations/pl.json.js.map +1 -1
  33. package/dist/admin/translations/pl.json.mjs +34 -1
  34. package/dist/admin/translations/pl.json.mjs.map +1 -1
  35. package/dist/admin/utils/api.js.map +1 -1
  36. package/dist/admin/utils/api.mjs.map +1 -1
  37. package/dist/server/bootstrap.js +4 -4
  38. package/dist/server/bootstrap.js.map +1 -1
  39. package/dist/server/bootstrap.mjs +4 -4
  40. package/dist/server/bootstrap.mjs.map +1 -1
  41. package/dist/server/constants/workflows.js +1 -1
  42. package/dist/server/constants/workflows.js.map +1 -1
  43. package/dist/server/constants/workflows.mjs +1 -1
  44. package/dist/server/constants/workflows.mjs.map +1 -1
  45. package/dist/server/controllers/stages.js.map +1 -1
  46. package/dist/server/controllers/stages.mjs.map +1 -1
  47. package/dist/server/controllers/workflows.js.map +1 -1
  48. package/dist/server/controllers/workflows.mjs.map +1 -1
  49. package/dist/server/destroy.js +1 -1
  50. package/dist/server/destroy.js.map +1 -1
  51. package/dist/server/destroy.mjs +1 -1
  52. package/dist/server/destroy.mjs.map +1 -1
  53. package/dist/server/register.js +0 -2
  54. package/dist/server/register.js.map +1 -1
  55. package/dist/server/register.mjs +0 -2
  56. package/dist/server/register.mjs.map +1 -1
  57. package/dist/server/services/assignees.js.map +1 -1
  58. package/dist/server/services/assignees.mjs.map +1 -1
  59. package/dist/server/services/document-service-middleware.js +3 -3
  60. package/dist/server/services/document-service-middleware.js.map +1 -1
  61. package/dist/server/services/document-service-middleware.mjs +3 -3
  62. package/dist/server/services/document-service-middleware.mjs.map +1 -1
  63. package/dist/server/services/stages.js.map +1 -1
  64. package/dist/server/services/stages.mjs.map +1 -1
  65. package/dist/server/src/bootstrap.d.ts +4 -1
  66. package/dist/server/src/bootstrap.d.ts.map +1 -1
  67. package/dist/server/src/constants/workflows.d.ts +1 -1
  68. package/dist/server/src/destroy.d.ts +1 -4
  69. package/dist/server/src/destroy.d.ts.map +1 -1
  70. package/dist/server/src/homepage/index.d.ts +3 -3
  71. package/dist/server/src/homepage/routes/index.d.ts +1 -1
  72. package/dist/server/src/homepage/services/index.d.ts +1 -1
  73. package/dist/server/src/index.d.ts +18 -18
  74. package/dist/server/src/register.d.ts.map +1 -1
  75. package/dist/server/src/routes/index.d.ts +1 -1
  76. package/dist/server/src/services/assignees.d.ts +2 -2
  77. package/dist/server/src/services/assignees.d.ts.map +1 -1
  78. package/dist/server/src/services/index.d.ts +13 -13
  79. package/dist/server/src/services/stages.d.ts +1 -1
  80. package/dist/server/src/services/stages.d.ts.map +1 -1
  81. package/package.json +20 -9
  82. package/dist/server/migrations/shorten-stage-attribute.js +0 -49
  83. package/dist/server/migrations/shorten-stage-attribute.js.map +0 -1
  84. package/dist/server/migrations/shorten-stage-attribute.mjs +0 -43
  85. package/dist/server/migrations/shorten-stage-attribute.mjs.map +0 -1
  86. package/dist/server/src/migrations/shorten-stage-attribute.d.ts +0 -6
  87. package/dist/server/src/migrations/shorten-stage-attribute.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stages.js","sources":["../../../server/src/services/stages.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\nimport type { StagePermission } from '../../../shared/contracts/review-workflows';\nimport { async, errors } from '@strapi/utils';\nimport { map, pick, isEqual } from 'lodash/fp';\nimport { STAGE_MODEL_UID, ENTITY_STAGE_ATTRIBUTE, ERRORS } from '../constants/workflows';\nimport { WORKFLOW_UPDATE_STAGE } from '../constants/webhook-events';\nimport { getService } from '../utils';\n\ninterface PopulatedPermission {\n role: number | { id: number };\n action: string;\n actionParameters?: { from?: number; to?: number };\n}\n\nconst { ApplicationError, ValidationError } = errors;\nconst sanitizedStageFields = ['id', 'name', 'workflow', 'color'];\nconst sanitizeStageFields = pick(sanitizedStageFields);\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const metrics = getService('workflow-metrics', { strapi });\n const stagePermissionsService = getService('stage-permissions', { strapi });\n const workflowValidator = getService('validation', { strapi });\n\n return {\n find({ workflowId, populate }: any) {\n return strapi.db.query(STAGE_MODEL_UID).findMany({\n where: { workflow: workflowId },\n populate,\n });\n },\n\n findById(id: string | number, { populate }: any = {}) {\n return strapi.db.query(STAGE_MODEL_UID).findOne({\n where: { id },\n populate,\n });\n },\n\n async createMany(stagesList: any, { fields }: any = {}) {\n const params = { select: fields ?? '*' };\n\n const stages = await Promise.all(\n stagesList.map((stage: any) =>\n strapi.db.query(STAGE_MODEL_UID).create({\n data: sanitizeStageFields(stage),\n ...params,\n })\n )\n );\n\n await async.reduce(stagesList)(async (_, stage, idx) => {\n const stageId = stages[idx].id;\n const allPermissionIds: number[] = [];\n\n // Register \"from\" permissions\n if (stage.fromPermissions && stage.fromPermissions.length > 0) {\n const fromPermissions = await async.map(\n stage.fromPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...fromPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n // Register \"to\" permissions\n if (stage.toPermissions && stage.toPermissions.length > 0) {\n const toPermissions = await async.map(\n stage.toPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...toPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n if (allPermissionIds.length > 0) {\n await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n permissions: allPermissionIds,\n },\n });\n }\n }, []);\n\n metrics.sendDidCreateStage();\n\n return stages;\n },\n\n async update(srcStage: any, destStage: any) {\n const stageId = destStage.id;\n const hasPermissionChanges = destStage.fromPermissions || destStage.toPermissions;\n\n let allPermissionIds: number[];\n\n if (hasPermissionChanges) {\n // Delete all old permissions (both from and to) when either type changes\n await this.deleteStagePermissions([srcStage]);\n\n allPermissionIds = [];\n\n const extractRoleId = (p: PopulatedPermission): number =>\n typeof p.role === 'object' ? p.role.id : p.role;\n\n // Re-register \"from\" permissions (fall back to existing \"from\" entries from DB)\n const fromPerms =\n destStage.fromPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.from)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (fromPerms.length > 0) {\n const registered = await async.map(fromPerms, (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n\n // Re-register \"to\" permissions (fall back to existing \"to\" entries from DB)\n const toPerms =\n destStage.toPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.to)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (toPerms.length > 0) {\n const registered = await async.map(toPerms, (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n } else {\n allPermissionIds = (srcStage?.permissions ?? [])\n .map((p: { id: number }) => p.id)\n .filter(Boolean);\n }\n\n const stage = await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n ...destStage,\n permissions: allPermissionIds,\n },\n });\n\n metrics.sendDidEditStage();\n\n return stage;\n },\n\n async delete(stage: any) {\n // Unregister all permissions related to this stage id\n await this.deleteStagePermissions([stage]);\n\n const deletedStage = await strapi.db.query(STAGE_MODEL_UID).delete({\n where: { id: stage.id },\n });\n\n metrics.sendDidDeleteStage();\n\n return deletedStage;\n },\n\n async deleteMany(stages: any) {\n await this.deleteStagePermissions(stages);\n\n return strapi.db.query(STAGE_MODEL_UID).deleteMany({\n where: { id: { $in: stages.map((s: any) => s.id) } },\n });\n },\n\n async deleteStagePermissions(stages: any) {\n const permissions = stages.map((s: any) => s.permissions || []).flat();\n await stagePermissionsService.unregister(permissions || []);\n },\n\n count({ workflowId }: any = {}) {\n const opts = {} as any;\n\n if (workflowId) {\n opts.where = {\n workflow: workflowId,\n };\n }\n\n return strapi.db.query(STAGE_MODEL_UID).count(opts);\n },\n\n async replaceStages(srcStages: any, destStages: any, contentTypesToMigrate = []) {\n const { created, updated, deleted } = getDiffBetweenStages(srcStages, destStages);\n\n assertAtLeastOneStageRemain(srcStages || [], { created, deleted });\n\n // Update stages and assign entity stages\n return strapi.db.transaction(async ({ trx }) => {\n // Create the new stages\n const createdStages = await this.createMany(created, { fields: ['id'] });\n // Put all the newly created stages ids\n const createdStagesIds = map('id', createdStages);\n\n // Update the workflow stages\n await async.map(updated, (destStage: any) => {\n const srcStage = srcStages.find((s: any) => s.id === destStage.id);\n\n return this.update(srcStage, destStage);\n });\n\n // Delete the stages that are not in the new stages list\n await async.map(deleted, async (stage: any) => {\n // Find the nearest stage in the workflow and newly created stages\n // that is not deleted, prioritizing the previous stages\n const nearestStage = findNearestMatchingStage(\n [...srcStages, ...createdStages],\n srcStages.findIndex((s: any) => s.id === stage.id),\n (targetStage: any) => {\n return !deleted.find((s: any) => s.id === targetStage.id);\n }\n );\n\n // Assign the new stage to entities that had the deleted stage\n await async.map(contentTypesToMigrate, (contentTypeUID: any) => {\n this.updateEntitiesStage(contentTypeUID, {\n fromStageId: stage.id,\n toStageId: nearestStage.id,\n trx,\n });\n });\n\n return this.delete(stage);\n });\n\n return destStages.map((stage: any) => ({\n ...stage,\n id: stage.id ?? createdStagesIds.shift(),\n }));\n });\n },\n\n /**\n * Update the stage of an entity\n */\n async updateEntity(\n entityToUpdate: {\n id: number | string;\n documentId: string;\n locale: string;\n updatedAt: string;\n },\n model: UID.ContentType,\n stageId: any\n ) {\n const stage = await this.findById(stageId);\n const { documentId, locale } = entityToUpdate;\n\n await workflowValidator.validateWorkflowCount();\n\n if (!stage) {\n throw new ApplicationError(`Selected stage does not exist`);\n }\n\n const entity = await strapi.documents(model).update({\n documentId,\n locale,\n // Stage doesn't have DP or i18n enabled, connecting it through the `id`\n // will be safer than relying on the `documentId` + `locale` + `status` transformation\n data: { [ENTITY_STAGE_ATTRIBUTE]: pick(['id'], stage) },\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n // Update the `updated_at` field of the entity, so that the `status` is not considered `Modified`\n // NOTE: `updatedAt` is a protected attribute that can not be modified directly from the query layer\n // hence the knex query builder is used here.\n const { tableName } = strapi.db.metadata.get(model);\n await strapi.db\n .connection(tableName)\n .where({ id: entityToUpdate.id })\n .update({\n updated_at: new Date(entityToUpdate.updatedAt),\n });\n\n metrics.sendDidChangeEntryStage();\n\n return entity;\n },\n\n /**\n * Updates entity stages of a content type:\n * - If fromStageId is undefined, all entities with an existing stage will be assigned the new stage\n * - If fromStageId is null, all entities without a stage will be assigned the new stage\n * - If fromStageId is a number, all entities with that stage will be assigned the new stage\n *\n * For performance reasons we use knex queries directly.\n *\n * @param {string} contentTypeUID\n * @param {number | undefined | null} fromStageId\n * @param {number} toStageId\n * @param {import('knex').Knex.Transaction} trx\n * @returns\n */\n async updateEntitiesStage(contentTypeUID: any, { fromStageId, toStageId }: any) {\n const { attributes, tableName } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n const joinColumn = joinTable.joinColumn.name;\n const invJoinColumn = joinTable.inverseJoinColumn.name;\n\n await workflowValidator.validateWorkflowCount();\n\n return strapi.db.transaction(async ({ trx }) => {\n // Update all already existing links to the new stage\n if (fromStageId === undefined) {\n return strapi.db\n .getConnection()\n .from(joinTable.name)\n .update({ [invJoinColumn]: toStageId })\n .transacting(trx);\n }\n\n // Update all links from the specified stage to the new stage\n const selectStatement = strapi.db\n .getConnection()\n .select({ [joinColumn]: 't1.id', [invJoinColumn]: toStageId })\n .from(`${tableName} as t1`)\n .leftJoin(`${joinTable.name} as t2`, `t1.id`, `t2.${joinColumn}`)\n .where(`t2.${invJoinColumn}`, fromStageId)\n .toSQL();\n\n // Insert rows for all entries of the content type that have the specified stage\n return strapi.db\n .getConnection(joinTable.name)\n .insert(\n strapi.db.connection.raw(\n `(${joinColumn}, ${invJoinColumn}) ${selectStatement.sql}`,\n selectStatement.bindings\n )\n )\n .transacting(trx);\n });\n },\n\n /**\n * Deletes all entity stages of a content type\n * @param {string} contentTypeUID\n * @returns\n */\n async deleteAllEntitiesStage(contentTypeUID: any) {\n const { attributes } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n\n // Delete all stage links for the content type\n return strapi.db.transaction(async ({ trx }) =>\n strapi.db.getConnection().from(joinTable.name).delete().transacting(trx)\n );\n },\n };\n};\n\nconst normalizeStageForDiff = (stage: {\n name?: string;\n color?: string;\n fromPermissions?: unknown[];\n toPermissions?: unknown[];\n}) => ({\n ...pick(['name', 'color'], stage),\n fromPermissions: stage.fromPermissions ?? [],\n toPermissions: stage.toPermissions ?? [],\n});\n\n/**\n * Compares two arrays of stages and returns an object indicating the differences.\n *\n * The function compares the `id` properties of each stage in `sourceStages` and `comparisonStages` to determine if the stage is present in both arrays.\n * If a stage with the same `id` is found in both arrays but the `name` property is different, the stage is considered updated.\n * If a stage with a particular `id` is only found in `comparisonStages`, it is considered created.\n * If a stage with a particular `id` is only found in `sourceStages`, it is considered deleted.\n *\n * @typedef {{id: Number, name: String, workflow: Number}} Stage\n * @typedef {{created: Stage[], updated: Stage[], deleted: Stage[]}} DiffStages\n *\n * The DiffStages object has three properties: `created`, `updated`, and `deleted`.\n * `created` is an array of stages that are in `comparisonStages` but not in `sourceStages`.\n * `updated` is an array of stages that have different names in `comparisonStages` and `sourceStages`.\n * `deleted` is an array of stages that are in `sourceStages` but not in `comparisonStages`.\n *\n * @param {Stage[]} sourceStages\n * @param {Stage[]} comparisonStages\n * @returns { DiffStages }\n */\nfunction getDiffBetweenStages(sourceStages: any, comparisonStages: any) {\n const result = comparisonStages.reduce(\n // ...\n\n (acc: any, stageToCompare: any) => {\n const srcStage = sourceStages.find((stage: any) => stage.id === stageToCompare.id);\n\n if (!srcStage) {\n acc.created.push(stageToCompare);\n } else if (!isEqual(normalizeStageForDiff(srcStage), normalizeStageForDiff(stageToCompare))) {\n acc.updated.push(stageToCompare);\n }\n return acc;\n },\n { created: [], updated: [] }\n );\n\n result.deleted = sourceStages.filter(\n (srcStage: any) => !comparisonStages.some((cmpStage: any) => cmpStage.id === srcStage.id)\n );\n\n return result;\n}\n\n/**\n * Asserts that at least one stage remains in the workflow after applying deletions and additions.\n *\n * @param {Array} workflowStages - An array of stages in the current workflow.\n * @param {Object} diffStages - An object containing the stages to be deleted and created.\n * @param {Array} diffStages.deleted - An array of stages that are planned to be deleted from the workflow.\n * @param {Array} diffStages.created - An array of stages that are planned to be created in the workflow.\n *\n * @throws {ValidationError} If the number of remaining stages in the workflow after applying deletions and additions is less than 1.\n */\nfunction assertAtLeastOneStageRemain(workflowStages: any, diffStages: any) {\n const remainingStagesCount =\n workflowStages.length - diffStages.deleted.length + diffStages.created.length;\n if (remainingStagesCount < 1) {\n throw new ValidationError(ERRORS.WORKFLOW_WITHOUT_STAGES);\n }\n}\n\n/**\n * Find the id of the nearest object in an array that matches a condition.\n * Used for searching for the nearest stage that is not deleted.\n * Starts by searching the elements before the index, then the remaining elements in the array.\n *\n * @param {Array} stages\n * @param {Number} startIndex the index to start searching from\n * @param {Function} condition must evaluate to true for the object to be considered a match\n * @returns {Object} stage\n */\nfunction findNearestMatchingStage(stages: any, startIndex: any, condition: any) {\n // Start by searching the elements before the startIndex\n for (let i = startIndex; i >= 0; i -= 1) {\n if (condition(stages[i])) {\n return stages[i];\n }\n }\n\n // If no matching element is found before the startIndex,\n // search the remaining elements in the array\n const remainingArray = stages.slice(startIndex + 1);\n const nearestObject = remainingArray.filter(condition)[0];\n return nearestObject;\n}\n"],"names":["ApplicationError","ValidationError","errors","sanitizedStageFields","sanitizeStageFields","pick","strapi","metrics","getService","stagePermissionsService","workflowValidator","find","workflowId","populate","db","query","STAGE_MODEL_UID","findMany","where","workflow","findById","id","findOne","createMany","stagesList","fields","params","select","stages","Promise","all","map","stage","create","data","async","reduce","_","idx","stageId","allPermissionIds","fromPermissions","length","permission","register","roleId","role","action","fromStage","push","flat","p","toPermissions","registerTo","toStage","update","permissions","sendDidCreateStage","srcStage","destStage","hasPermissionChanges","deleteStagePermissions","extractRoleId","fromPerms","filter","actionParameters","from","registered","toPerms","to","Boolean","sendDidEditStage","delete","deletedStage","sendDidDeleteStage","deleteMany","$in","s","unregister","count","opts","replaceStages","srcStages","destStages","contentTypesToMigrate","created","updated","deleted","getDiffBetweenStages","assertAtLeastOneStageRemain","transaction","trx","createdStages","createdStagesIds","nearestStage","findNearestMatchingStage","findIndex","targetStage","contentTypeUID","updateEntitiesStage","fromStageId","toStageId","shift","updateEntity","entityToUpdate","model","documentId","locale","validateWorkflowCount","entity","documents","ENTITY_STAGE_ATTRIBUTE","tableName","metadata","get","connection","updated_at","Date","updatedAt","sendDidChangeEntryStage","attributes","joinTable","joinColumn","name","invJoinColumn","inverseJoinColumn","undefined","getConnection","transacting","selectStatement","leftJoin","toSQL","insert","raw","sql","bindings","deleteAllEntitiesStage","normalizeStageForDiff","sourceStages","comparisonStages","result","acc","stageToCompare","isEqual","some","cmpStage","workflowStages","diffStages","remainingStagesCount","ERRORS","WORKFLOW_WITHOUT_STAGES","startIndex","condition","i","remainingArray","slice","nearestObject"],"mappings":"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"}
1
+ {"version":3,"file":"stages.js","sources":["../../../server/src/services/stages.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { map, pick, isEqual } from 'lodash/fp';\nimport type { StagePermission } from '../../../shared/contracts/review-workflows';\nimport { STAGE_MODEL_UID, ENTITY_STAGE_ATTRIBUTE, ERRORS } from '../constants/workflows';\nimport { getService } from '../utils';\n\ninterface PopulatedPermission {\n role: number | { id: number };\n action: string;\n actionParameters?: { from?: number; to?: number };\n}\n\nconst { ApplicationError, ValidationError } = errors;\nconst sanitizedStageFields = ['id', 'name', 'workflow', 'color'];\nconst sanitizeStageFields = pick(sanitizedStageFields);\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const metrics = getService('workflow-metrics', { strapi });\n const stagePermissionsService = getService('stage-permissions', { strapi });\n const workflowValidator = getService('validation', { strapi });\n\n return {\n find({ workflowId, populate }: any) {\n return strapi.db.query(STAGE_MODEL_UID).findMany({\n where: { workflow: workflowId },\n populate,\n });\n },\n\n findById(id: string | number, { populate }: any = {}) {\n return strapi.db.query(STAGE_MODEL_UID).findOne({\n where: { id },\n populate,\n });\n },\n\n async createMany(stagesList: any, { fields }: any = {}) {\n const params = { select: fields ?? '*' };\n\n const stages = await Promise.all(\n stagesList.map((stage: any) =>\n strapi.db.query(STAGE_MODEL_UID).create({\n data: sanitizeStageFields(stage),\n ...params,\n })\n )\n );\n\n await async.reduce(stagesList)(async (_, stage, idx) => {\n const stageId = stages[idx].id;\n const allPermissionIds: number[] = [];\n\n // Register \"from\" permissions\n if (stage.fromPermissions && stage.fromPermissions.length > 0) {\n const fromPermissions = await async.map(\n stage.fromPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...fromPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n // Register \"to\" permissions\n if (stage.toPermissions && stage.toPermissions.length > 0) {\n const toPermissions = await async.map(\n stage.toPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...toPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n if (allPermissionIds.length > 0) {\n await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n permissions: allPermissionIds,\n },\n });\n }\n }, []);\n\n metrics.sendDidCreateStage();\n\n return stages;\n },\n\n async update(srcStage: any, destStage: any) {\n const stageId = destStage.id;\n const hasPermissionChanges = destStage.fromPermissions || destStage.toPermissions;\n\n let allPermissionIds: number[];\n\n if (hasPermissionChanges) {\n // Delete all old permissions (both from and to) when either type changes\n await this.deleteStagePermissions([srcStage]);\n\n allPermissionIds = [];\n\n const extractRoleId = (p: PopulatedPermission): number =>\n typeof p.role === 'object' ? p.role.id : p.role;\n\n // Re-register \"from\" permissions (fall back to existing \"from\" entries from DB)\n const fromPerms =\n destStage.fromPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.from)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (fromPerms.length > 0) {\n const registered = await async.map(fromPerms, (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n\n // Re-register \"to\" permissions (fall back to existing \"to\" entries from DB)\n const toPerms =\n destStage.toPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.to)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (toPerms.length > 0) {\n const registered = await async.map(toPerms, (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n } else {\n allPermissionIds = (srcStage?.permissions ?? [])\n .map((p: { id: number }) => p.id)\n .filter(Boolean);\n }\n\n const stage = await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n ...destStage,\n permissions: allPermissionIds,\n },\n });\n\n metrics.sendDidEditStage();\n\n return stage;\n },\n\n async delete(stage: any) {\n // Unregister all permissions related to this stage id\n await this.deleteStagePermissions([stage]);\n\n const deletedStage = await strapi.db.query(STAGE_MODEL_UID).delete({\n where: { id: stage.id },\n });\n\n metrics.sendDidDeleteStage();\n\n return deletedStage;\n },\n\n async deleteMany(stages: any) {\n await this.deleteStagePermissions(stages);\n\n return strapi.db.query(STAGE_MODEL_UID).deleteMany({\n where: { id: { $in: stages.map((s: any) => s.id) } },\n });\n },\n\n async deleteStagePermissions(stages: any) {\n const permissions = stages.map((s: any) => s.permissions || []).flat();\n await stagePermissionsService.unregister(permissions || []);\n },\n\n count({ workflowId }: any = {}) {\n const opts = {} as any;\n\n if (workflowId) {\n opts.where = {\n workflow: workflowId,\n };\n }\n\n return strapi.db.query(STAGE_MODEL_UID).count(opts);\n },\n\n async replaceStages(srcStages: any, destStages: any, contentTypesToMigrate = []) {\n const { created, updated, deleted } = getDiffBetweenStages(srcStages, destStages);\n\n assertAtLeastOneStageRemain(srcStages || [], { created, deleted });\n\n // Update stages and assign entity stages\n return strapi.db.transaction(async ({ trx }) => {\n // Create the new stages\n const createdStages = await this.createMany(created, { fields: ['id'] });\n // Put all the newly created stages ids\n const createdStagesIds = map('id', createdStages);\n\n // Update the workflow stages\n await async.map(updated, (destStage: any) => {\n const srcStage = srcStages.find((s: any) => s.id === destStage.id);\n\n return this.update(srcStage, destStage);\n });\n\n // Delete the stages that are not in the new stages list\n await async.map(deleted, async (stage: any) => {\n // Find the nearest stage in the workflow and newly created stages\n // that is not deleted, prioritizing the previous stages\n const nearestStage = findNearestMatchingStage(\n [...srcStages, ...createdStages],\n srcStages.findIndex((s: any) => s.id === stage.id),\n (targetStage: any) => {\n return !deleted.find((s: any) => s.id === targetStage.id);\n }\n );\n\n // Assign the new stage to entities that had the deleted stage\n await async.map(contentTypesToMigrate, (contentTypeUID: any) => {\n this.updateEntitiesStage(contentTypeUID, {\n fromStageId: stage.id,\n toStageId: nearestStage.id,\n trx,\n });\n });\n\n return this.delete(stage);\n });\n\n return destStages.map((stage: any) => ({\n ...stage,\n id: stage.id ?? createdStagesIds.shift(),\n }));\n });\n },\n\n /**\n * Update the stage of an entity\n */\n async updateEntity(\n entityToUpdate: {\n id: number | string;\n documentId: string;\n locale: string;\n updatedAt: string;\n },\n model: UID.ContentType,\n stageId: any\n ) {\n const stage = await this.findById(stageId);\n const { documentId, locale } = entityToUpdate;\n\n await workflowValidator.validateWorkflowCount();\n\n if (!stage) {\n throw new ApplicationError(`Selected stage does not exist`);\n }\n\n const entity = await strapi.documents(model).update({\n documentId,\n locale,\n // Stage doesn't have DP or i18n enabled, connecting it through the `id`\n // will be safer than relying on the `documentId` + `locale` + `status` transformation\n data: { [ENTITY_STAGE_ATTRIBUTE]: pick(['id'], stage) },\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n // Update the `updated_at` field of the entity, so that the `status` is not considered `Modified`\n // NOTE: `updatedAt` is a protected attribute that can not be modified directly from the query layer\n // hence the knex query builder is used here.\n const { tableName } = strapi.db.metadata.get(model);\n await strapi.db\n .connection(tableName)\n .where({ id: entityToUpdate.id })\n .update({\n updated_at: new Date(entityToUpdate.updatedAt),\n });\n\n metrics.sendDidChangeEntryStage();\n\n return entity;\n },\n\n /**\n * Updates entity stages of a content type:\n * - If fromStageId is undefined, all entities with an existing stage will be assigned the new stage\n * - If fromStageId is null, all entities without a stage will be assigned the new stage\n * - If fromStageId is a number, all entities with that stage will be assigned the new stage\n *\n * For performance reasons we use knex queries directly.\n *\n * @param {string} contentTypeUID\n * @param {number | undefined | null} fromStageId\n * @param {number} toStageId\n * @param {import('knex').Knex.Transaction} trx\n * @returns\n */\n async updateEntitiesStage(contentTypeUID: any, { fromStageId, toStageId }: any) {\n const { attributes, tableName } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n const joinColumn = joinTable.joinColumn.name;\n const invJoinColumn = joinTable.inverseJoinColumn.name;\n\n await workflowValidator.validateWorkflowCount();\n\n return strapi.db.transaction(async ({ trx }) => {\n // Update all already existing links to the new stage\n if (fromStageId === undefined) {\n return strapi.db\n .getConnection()\n .from(joinTable.name)\n .update({ [invJoinColumn]: toStageId })\n .transacting(trx);\n }\n\n // Update all links from the specified stage to the new stage\n const selectStatement = strapi.db\n .getConnection()\n .select({ [joinColumn]: 't1.id', [invJoinColumn]: toStageId })\n .from(`${tableName} as t1`)\n .leftJoin(`${joinTable.name} as t2`, `t1.id`, `t2.${joinColumn}`)\n .where(`t2.${invJoinColumn}`, fromStageId)\n .toSQL();\n\n // Insert rows for all entries of the content type that have the specified stage\n return strapi.db\n .getConnection(joinTable.name)\n .insert(\n strapi.db.connection.raw(\n `(${joinColumn}, ${invJoinColumn}) ${selectStatement.sql}`,\n selectStatement.bindings\n )\n )\n .transacting(trx);\n });\n },\n\n /**\n * Deletes all entity stages of a content type\n * @param {string} contentTypeUID\n * @returns\n */\n async deleteAllEntitiesStage(contentTypeUID: any) {\n const { attributes } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n\n // Delete all stage links for the content type\n return strapi.db.transaction(async ({ trx }) =>\n strapi.db.getConnection().from(joinTable.name).delete().transacting(trx)\n );\n },\n };\n};\n\nconst normalizeStageForDiff = (stage: {\n name?: string;\n color?: string;\n fromPermissions?: unknown[];\n toPermissions?: unknown[];\n}) => ({\n ...pick(['name', 'color'], stage),\n fromPermissions: stage.fromPermissions ?? [],\n toPermissions: stage.toPermissions ?? [],\n});\n\n/**\n * Compares two arrays of stages and returns an object indicating the differences.\n *\n * The function compares the `id` properties of each stage in `sourceStages` and `comparisonStages` to determine if the stage is present in both arrays.\n * If a stage with the same `id` is found in both arrays but the `name` property is different, the stage is considered updated.\n * If a stage with a particular `id` is only found in `comparisonStages`, it is considered created.\n * If a stage with a particular `id` is only found in `sourceStages`, it is considered deleted.\n *\n * @typedef {{id: Number, name: String, workflow: Number}} Stage\n * @typedef {{created: Stage[], updated: Stage[], deleted: Stage[]}} DiffStages\n *\n * The DiffStages object has three properties: `created`, `updated`, and `deleted`.\n * `created` is an array of stages that are in `comparisonStages` but not in `sourceStages`.\n * `updated` is an array of stages that have different names in `comparisonStages` and `sourceStages`.\n * `deleted` is an array of stages that are in `sourceStages` but not in `comparisonStages`.\n *\n * @param {Stage[]} sourceStages\n * @param {Stage[]} comparisonStages\n * @returns { DiffStages }\n */\nfunction getDiffBetweenStages(sourceStages: any, comparisonStages: any) {\n const result = comparisonStages.reduce(\n // ...\n\n (acc: any, stageToCompare: any) => {\n const srcStage = sourceStages.find((stage: any) => stage.id === stageToCompare.id);\n\n if (!srcStage) {\n acc.created.push(stageToCompare);\n } else if (!isEqual(normalizeStageForDiff(srcStage), normalizeStageForDiff(stageToCompare))) {\n acc.updated.push(stageToCompare);\n }\n return acc;\n },\n { created: [], updated: [] }\n );\n\n result.deleted = sourceStages.filter(\n (srcStage: any) => !comparisonStages.some((cmpStage: any) => cmpStage.id === srcStage.id)\n );\n\n return result;\n}\n\n/**\n * Asserts that at least one stage remains in the workflow after applying deletions and additions.\n *\n * @param {Array} workflowStages - An array of stages in the current workflow.\n * @param {Object} diffStages - An object containing the stages to be deleted and created.\n * @param {Array} diffStages.deleted - An array of stages that are planned to be deleted from the workflow.\n * @param {Array} diffStages.created - An array of stages that are planned to be created in the workflow.\n *\n * @throws {ValidationError} If the number of remaining stages in the workflow after applying deletions and additions is less than 1.\n */\nfunction assertAtLeastOneStageRemain(workflowStages: any, diffStages: any) {\n const remainingStagesCount =\n workflowStages.length - diffStages.deleted.length + diffStages.created.length;\n if (remainingStagesCount < 1) {\n throw new ValidationError(ERRORS.WORKFLOW_WITHOUT_STAGES);\n }\n}\n\n/**\n * Find the id of the nearest object in an array that matches a condition.\n * Used for searching for the nearest stage that is not deleted.\n * Starts by searching the elements before the index, then the remaining elements in the array.\n *\n * @param {Array} stages\n * @param {Number} startIndex the index to start searching from\n * @param {Function} condition must evaluate to true for the object to be considered a match\n * @returns {Object} stage\n */\nfunction findNearestMatchingStage(stages: any, startIndex: any, condition: any) {\n // Start by searching the elements before the startIndex\n for (let i = startIndex; i >= 0; i -= 1) {\n if (condition(stages[i])) {\n return stages[i];\n }\n }\n\n // If no matching element is found before the startIndex,\n // search the remaining elements in the array\n const remainingArray = stages.slice(startIndex + 1);\n const nearestObject = remainingArray.filter(condition)[0];\n return nearestObject;\n}\n"],"names":["ApplicationError","ValidationError","errors","sanitizedStageFields","sanitizeStageFields","pick","strapi","metrics","getService","stagePermissionsService","workflowValidator","find","workflowId","populate","db","query","STAGE_MODEL_UID","findMany","where","workflow","findById","id","findOne","createMany","stagesList","fields","params","select","stages","Promise","all","map","stage","create","data","async","reduce","_","idx","stageId","allPermissionIds","fromPermissions","length","permission","register","roleId","role","action","fromStage","push","flat","p","toPermissions","registerTo","toStage","update","permissions","sendDidCreateStage","srcStage","destStage","hasPermissionChanges","deleteStagePermissions","extractRoleId","fromPerms","filter","actionParameters","from","registered","toPerms","to","Boolean","sendDidEditStage","delete","deletedStage","sendDidDeleteStage","deleteMany","$in","s","unregister","count","opts","replaceStages","srcStages","destStages","contentTypesToMigrate","created","updated","deleted","getDiffBetweenStages","assertAtLeastOneStageRemain","transaction","trx","createdStages","createdStagesIds","nearestStage","findNearestMatchingStage","findIndex","targetStage","contentTypeUID","updateEntitiesStage","fromStageId","toStageId","shift","updateEntity","entityToUpdate","model","documentId","locale","validateWorkflowCount","entity","documents","ENTITY_STAGE_ATTRIBUTE","tableName","metadata","get","connection","updated_at","Date","updatedAt","sendDidChangeEntryStage","attributes","joinTable","joinColumn","name","invJoinColumn","inverseJoinColumn","undefined","getConnection","transacting","selectStatement","leftJoin","toSQL","insert","raw","sql","bindings","deleteAllEntitiesStage","normalizeStageForDiff","sourceStages","comparisonStages","result","acc","stageToCompare","isEqual","some","cmpStage","workflowStages","diffStages","remainingStagesCount","ERRORS","WORKFLOW_WITHOUT_STAGES","startIndex","condition","i","remainingArray","slice","nearestObject"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stages.mjs","sources":["../../../server/src/services/stages.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\nimport type { StagePermission } from '../../../shared/contracts/review-workflows';\nimport { async, errors } from '@strapi/utils';\nimport { map, pick, isEqual } from 'lodash/fp';\nimport { STAGE_MODEL_UID, ENTITY_STAGE_ATTRIBUTE, ERRORS } from '../constants/workflows';\nimport { WORKFLOW_UPDATE_STAGE } from '../constants/webhook-events';\nimport { getService } from '../utils';\n\ninterface PopulatedPermission {\n role: number | { id: number };\n action: string;\n actionParameters?: { from?: number; to?: number };\n}\n\nconst { ApplicationError, ValidationError } = errors;\nconst sanitizedStageFields = ['id', 'name', 'workflow', 'color'];\nconst sanitizeStageFields = pick(sanitizedStageFields);\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const metrics = getService('workflow-metrics', { strapi });\n const stagePermissionsService = getService('stage-permissions', { strapi });\n const workflowValidator = getService('validation', { strapi });\n\n return {\n find({ workflowId, populate }: any) {\n return strapi.db.query(STAGE_MODEL_UID).findMany({\n where: { workflow: workflowId },\n populate,\n });\n },\n\n findById(id: string | number, { populate }: any = {}) {\n return strapi.db.query(STAGE_MODEL_UID).findOne({\n where: { id },\n populate,\n });\n },\n\n async createMany(stagesList: any, { fields }: any = {}) {\n const params = { select: fields ?? '*' };\n\n const stages = await Promise.all(\n stagesList.map((stage: any) =>\n strapi.db.query(STAGE_MODEL_UID).create({\n data: sanitizeStageFields(stage),\n ...params,\n })\n )\n );\n\n await async.reduce(stagesList)(async (_, stage, idx) => {\n const stageId = stages[idx].id;\n const allPermissionIds: number[] = [];\n\n // Register \"from\" permissions\n if (stage.fromPermissions && stage.fromPermissions.length > 0) {\n const fromPermissions = await async.map(\n stage.fromPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...fromPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n // Register \"to\" permissions\n if (stage.toPermissions && stage.toPermissions.length > 0) {\n const toPermissions = await async.map(\n stage.toPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...toPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n if (allPermissionIds.length > 0) {\n await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n permissions: allPermissionIds,\n },\n });\n }\n }, []);\n\n metrics.sendDidCreateStage();\n\n return stages;\n },\n\n async update(srcStage: any, destStage: any) {\n const stageId = destStage.id;\n const hasPermissionChanges = destStage.fromPermissions || destStage.toPermissions;\n\n let allPermissionIds: number[];\n\n if (hasPermissionChanges) {\n // Delete all old permissions (both from and to) when either type changes\n await this.deleteStagePermissions([srcStage]);\n\n allPermissionIds = [];\n\n const extractRoleId = (p: PopulatedPermission): number =>\n typeof p.role === 'object' ? p.role.id : p.role;\n\n // Re-register \"from\" permissions (fall back to existing \"from\" entries from DB)\n const fromPerms =\n destStage.fromPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.from)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (fromPerms.length > 0) {\n const registered = await async.map(fromPerms, (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n\n // Re-register \"to\" permissions (fall back to existing \"to\" entries from DB)\n const toPerms =\n destStage.toPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.to)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (toPerms.length > 0) {\n const registered = await async.map(toPerms, (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n } else {\n allPermissionIds = (srcStage?.permissions ?? [])\n .map((p: { id: number }) => p.id)\n .filter(Boolean);\n }\n\n const stage = await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n ...destStage,\n permissions: allPermissionIds,\n },\n });\n\n metrics.sendDidEditStage();\n\n return stage;\n },\n\n async delete(stage: any) {\n // Unregister all permissions related to this stage id\n await this.deleteStagePermissions([stage]);\n\n const deletedStage = await strapi.db.query(STAGE_MODEL_UID).delete({\n where: { id: stage.id },\n });\n\n metrics.sendDidDeleteStage();\n\n return deletedStage;\n },\n\n async deleteMany(stages: any) {\n await this.deleteStagePermissions(stages);\n\n return strapi.db.query(STAGE_MODEL_UID).deleteMany({\n where: { id: { $in: stages.map((s: any) => s.id) } },\n });\n },\n\n async deleteStagePermissions(stages: any) {\n const permissions = stages.map((s: any) => s.permissions || []).flat();\n await stagePermissionsService.unregister(permissions || []);\n },\n\n count({ workflowId }: any = {}) {\n const opts = {} as any;\n\n if (workflowId) {\n opts.where = {\n workflow: workflowId,\n };\n }\n\n return strapi.db.query(STAGE_MODEL_UID).count(opts);\n },\n\n async replaceStages(srcStages: any, destStages: any, contentTypesToMigrate = []) {\n const { created, updated, deleted } = getDiffBetweenStages(srcStages, destStages);\n\n assertAtLeastOneStageRemain(srcStages || [], { created, deleted });\n\n // Update stages and assign entity stages\n return strapi.db.transaction(async ({ trx }) => {\n // Create the new stages\n const createdStages = await this.createMany(created, { fields: ['id'] });\n // Put all the newly created stages ids\n const createdStagesIds = map('id', createdStages);\n\n // Update the workflow stages\n await async.map(updated, (destStage: any) => {\n const srcStage = srcStages.find((s: any) => s.id === destStage.id);\n\n return this.update(srcStage, destStage);\n });\n\n // Delete the stages that are not in the new stages list\n await async.map(deleted, async (stage: any) => {\n // Find the nearest stage in the workflow and newly created stages\n // that is not deleted, prioritizing the previous stages\n const nearestStage = findNearestMatchingStage(\n [...srcStages, ...createdStages],\n srcStages.findIndex((s: any) => s.id === stage.id),\n (targetStage: any) => {\n return !deleted.find((s: any) => s.id === targetStage.id);\n }\n );\n\n // Assign the new stage to entities that had the deleted stage\n await async.map(contentTypesToMigrate, (contentTypeUID: any) => {\n this.updateEntitiesStage(contentTypeUID, {\n fromStageId: stage.id,\n toStageId: nearestStage.id,\n trx,\n });\n });\n\n return this.delete(stage);\n });\n\n return destStages.map((stage: any) => ({\n ...stage,\n id: stage.id ?? createdStagesIds.shift(),\n }));\n });\n },\n\n /**\n * Update the stage of an entity\n */\n async updateEntity(\n entityToUpdate: {\n id: number | string;\n documentId: string;\n locale: string;\n updatedAt: string;\n },\n model: UID.ContentType,\n stageId: any\n ) {\n const stage = await this.findById(stageId);\n const { documentId, locale } = entityToUpdate;\n\n await workflowValidator.validateWorkflowCount();\n\n if (!stage) {\n throw new ApplicationError(`Selected stage does not exist`);\n }\n\n const entity = await strapi.documents(model).update({\n documentId,\n locale,\n // Stage doesn't have DP or i18n enabled, connecting it through the `id`\n // will be safer than relying on the `documentId` + `locale` + `status` transformation\n data: { [ENTITY_STAGE_ATTRIBUTE]: pick(['id'], stage) },\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n // Update the `updated_at` field of the entity, so that the `status` is not considered `Modified`\n // NOTE: `updatedAt` is a protected attribute that can not be modified directly from the query layer\n // hence the knex query builder is used here.\n const { tableName } = strapi.db.metadata.get(model);\n await strapi.db\n .connection(tableName)\n .where({ id: entityToUpdate.id })\n .update({\n updated_at: new Date(entityToUpdate.updatedAt),\n });\n\n metrics.sendDidChangeEntryStage();\n\n return entity;\n },\n\n /**\n * Updates entity stages of a content type:\n * - If fromStageId is undefined, all entities with an existing stage will be assigned the new stage\n * - If fromStageId is null, all entities without a stage will be assigned the new stage\n * - If fromStageId is a number, all entities with that stage will be assigned the new stage\n *\n * For performance reasons we use knex queries directly.\n *\n * @param {string} contentTypeUID\n * @param {number | undefined | null} fromStageId\n * @param {number} toStageId\n * @param {import('knex').Knex.Transaction} trx\n * @returns\n */\n async updateEntitiesStage(contentTypeUID: any, { fromStageId, toStageId }: any) {\n const { attributes, tableName } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n const joinColumn = joinTable.joinColumn.name;\n const invJoinColumn = joinTable.inverseJoinColumn.name;\n\n await workflowValidator.validateWorkflowCount();\n\n return strapi.db.transaction(async ({ trx }) => {\n // Update all already existing links to the new stage\n if (fromStageId === undefined) {\n return strapi.db\n .getConnection()\n .from(joinTable.name)\n .update({ [invJoinColumn]: toStageId })\n .transacting(trx);\n }\n\n // Update all links from the specified stage to the new stage\n const selectStatement = strapi.db\n .getConnection()\n .select({ [joinColumn]: 't1.id', [invJoinColumn]: toStageId })\n .from(`${tableName} as t1`)\n .leftJoin(`${joinTable.name} as t2`, `t1.id`, `t2.${joinColumn}`)\n .where(`t2.${invJoinColumn}`, fromStageId)\n .toSQL();\n\n // Insert rows for all entries of the content type that have the specified stage\n return strapi.db\n .getConnection(joinTable.name)\n .insert(\n strapi.db.connection.raw(\n `(${joinColumn}, ${invJoinColumn}) ${selectStatement.sql}`,\n selectStatement.bindings\n )\n )\n .transacting(trx);\n });\n },\n\n /**\n * Deletes all entity stages of a content type\n * @param {string} contentTypeUID\n * @returns\n */\n async deleteAllEntitiesStage(contentTypeUID: any) {\n const { attributes } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n\n // Delete all stage links for the content type\n return strapi.db.transaction(async ({ trx }) =>\n strapi.db.getConnection().from(joinTable.name).delete().transacting(trx)\n );\n },\n };\n};\n\nconst normalizeStageForDiff = (stage: {\n name?: string;\n color?: string;\n fromPermissions?: unknown[];\n toPermissions?: unknown[];\n}) => ({\n ...pick(['name', 'color'], stage),\n fromPermissions: stage.fromPermissions ?? [],\n toPermissions: stage.toPermissions ?? [],\n});\n\n/**\n * Compares two arrays of stages and returns an object indicating the differences.\n *\n * The function compares the `id` properties of each stage in `sourceStages` and `comparisonStages` to determine if the stage is present in both arrays.\n * If a stage with the same `id` is found in both arrays but the `name` property is different, the stage is considered updated.\n * If a stage with a particular `id` is only found in `comparisonStages`, it is considered created.\n * If a stage with a particular `id` is only found in `sourceStages`, it is considered deleted.\n *\n * @typedef {{id: Number, name: String, workflow: Number}} Stage\n * @typedef {{created: Stage[], updated: Stage[], deleted: Stage[]}} DiffStages\n *\n * The DiffStages object has three properties: `created`, `updated`, and `deleted`.\n * `created` is an array of stages that are in `comparisonStages` but not in `sourceStages`.\n * `updated` is an array of stages that have different names in `comparisonStages` and `sourceStages`.\n * `deleted` is an array of stages that are in `sourceStages` but not in `comparisonStages`.\n *\n * @param {Stage[]} sourceStages\n * @param {Stage[]} comparisonStages\n * @returns { DiffStages }\n */\nfunction getDiffBetweenStages(sourceStages: any, comparisonStages: any) {\n const result = comparisonStages.reduce(\n // ...\n\n (acc: any, stageToCompare: any) => {\n const srcStage = sourceStages.find((stage: any) => stage.id === stageToCompare.id);\n\n if (!srcStage) {\n acc.created.push(stageToCompare);\n } else if (!isEqual(normalizeStageForDiff(srcStage), normalizeStageForDiff(stageToCompare))) {\n acc.updated.push(stageToCompare);\n }\n return acc;\n },\n { created: [], updated: [] }\n );\n\n result.deleted = sourceStages.filter(\n (srcStage: any) => !comparisonStages.some((cmpStage: any) => cmpStage.id === srcStage.id)\n );\n\n return result;\n}\n\n/**\n * Asserts that at least one stage remains in the workflow after applying deletions and additions.\n *\n * @param {Array} workflowStages - An array of stages in the current workflow.\n * @param {Object} diffStages - An object containing the stages to be deleted and created.\n * @param {Array} diffStages.deleted - An array of stages that are planned to be deleted from the workflow.\n * @param {Array} diffStages.created - An array of stages that are planned to be created in the workflow.\n *\n * @throws {ValidationError} If the number of remaining stages in the workflow after applying deletions and additions is less than 1.\n */\nfunction assertAtLeastOneStageRemain(workflowStages: any, diffStages: any) {\n const remainingStagesCount =\n workflowStages.length - diffStages.deleted.length + diffStages.created.length;\n if (remainingStagesCount < 1) {\n throw new ValidationError(ERRORS.WORKFLOW_WITHOUT_STAGES);\n }\n}\n\n/**\n * Find the id of the nearest object in an array that matches a condition.\n * Used for searching for the nearest stage that is not deleted.\n * Starts by searching the elements before the index, then the remaining elements in the array.\n *\n * @param {Array} stages\n * @param {Number} startIndex the index to start searching from\n * @param {Function} condition must evaluate to true for the object to be considered a match\n * @returns {Object} stage\n */\nfunction findNearestMatchingStage(stages: any, startIndex: any, condition: any) {\n // Start by searching the elements before the startIndex\n for (let i = startIndex; i >= 0; i -= 1) {\n if (condition(stages[i])) {\n return stages[i];\n }\n }\n\n // If no matching element is found before the startIndex,\n // search the remaining elements in the array\n const remainingArray = stages.slice(startIndex + 1);\n const nearestObject = remainingArray.filter(condition)[0];\n return nearestObject;\n}\n"],"names":["ApplicationError","ValidationError","errors","sanitizedStageFields","sanitizeStageFields","pick","strapi","metrics","getService","stagePermissionsService","workflowValidator","find","workflowId","populate","db","query","STAGE_MODEL_UID","findMany","where","workflow","findById","id","findOne","createMany","stagesList","fields","params","select","stages","Promise","all","map","stage","create","data","async","reduce","_","idx","stageId","allPermissionIds","fromPermissions","length","permission","register","roleId","role","action","fromStage","push","flat","p","toPermissions","registerTo","toStage","update","permissions","sendDidCreateStage","srcStage","destStage","hasPermissionChanges","deleteStagePermissions","extractRoleId","fromPerms","filter","actionParameters","from","registered","toPerms","to","Boolean","sendDidEditStage","delete","deletedStage","sendDidDeleteStage","deleteMany","$in","s","unregister","count","opts","replaceStages","srcStages","destStages","contentTypesToMigrate","created","updated","deleted","getDiffBetweenStages","assertAtLeastOneStageRemain","transaction","trx","createdStages","createdStagesIds","nearestStage","findNearestMatchingStage","findIndex","targetStage","contentTypeUID","updateEntitiesStage","fromStageId","toStageId","shift","updateEntity","entityToUpdate","model","documentId","locale","validateWorkflowCount","entity","documents","ENTITY_STAGE_ATTRIBUTE","tableName","metadata","get","connection","updated_at","Date","updatedAt","sendDidChangeEntryStage","attributes","joinTable","joinColumn","name","invJoinColumn","inverseJoinColumn","undefined","getConnection","transacting","selectStatement","leftJoin","toSQL","insert","raw","sql","bindings","deleteAllEntitiesStage","normalizeStageForDiff","sourceStages","comparisonStages","result","acc","stageToCompare","isEqual","some","cmpStage","workflowStages","diffStages","remainingStagesCount","ERRORS","WORKFLOW_WITHOUT_STAGES","startIndex","condition","i","remainingArray","slice","nearestObject"],"mappings":"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"}
1
+ {"version":3,"file":"stages.mjs","sources":["../../../server/src/services/stages.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { map, pick, isEqual } from 'lodash/fp';\nimport type { StagePermission } from '../../../shared/contracts/review-workflows';\nimport { STAGE_MODEL_UID, ENTITY_STAGE_ATTRIBUTE, ERRORS } from '../constants/workflows';\nimport { getService } from '../utils';\n\ninterface PopulatedPermission {\n role: number | { id: number };\n action: string;\n actionParameters?: { from?: number; to?: number };\n}\n\nconst { ApplicationError, ValidationError } = errors;\nconst sanitizedStageFields = ['id', 'name', 'workflow', 'color'];\nconst sanitizeStageFields = pick(sanitizedStageFields);\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const metrics = getService('workflow-metrics', { strapi });\n const stagePermissionsService = getService('stage-permissions', { strapi });\n const workflowValidator = getService('validation', { strapi });\n\n return {\n find({ workflowId, populate }: any) {\n return strapi.db.query(STAGE_MODEL_UID).findMany({\n where: { workflow: workflowId },\n populate,\n });\n },\n\n findById(id: string | number, { populate }: any = {}) {\n return strapi.db.query(STAGE_MODEL_UID).findOne({\n where: { id },\n populate,\n });\n },\n\n async createMany(stagesList: any, { fields }: any = {}) {\n const params = { select: fields ?? '*' };\n\n const stages = await Promise.all(\n stagesList.map((stage: any) =>\n strapi.db.query(STAGE_MODEL_UID).create({\n data: sanitizeStageFields(stage),\n ...params,\n })\n )\n );\n\n await async.reduce(stagesList)(async (_, stage, idx) => {\n const stageId = stages[idx].id;\n const allPermissionIds: number[] = [];\n\n // Register \"from\" permissions\n if (stage.fromPermissions && stage.fromPermissions.length > 0) {\n const fromPermissions = await async.map(\n stage.fromPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...fromPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n // Register \"to\" permissions\n if (stage.toPermissions && stage.toPermissions.length > 0) {\n const toPermissions = await async.map(\n stage.toPermissions,\n (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...toPermissions.flat().map((p: { id: number }) => p.id));\n }\n\n if (allPermissionIds.length > 0) {\n await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n permissions: allPermissionIds,\n },\n });\n }\n }, []);\n\n metrics.sendDidCreateStage();\n\n return stages;\n },\n\n async update(srcStage: any, destStage: any) {\n const stageId = destStage.id;\n const hasPermissionChanges = destStage.fromPermissions || destStage.toPermissions;\n\n let allPermissionIds: number[];\n\n if (hasPermissionChanges) {\n // Delete all old permissions (both from and to) when either type changes\n await this.deleteStagePermissions([srcStage]);\n\n allPermissionIds = [];\n\n const extractRoleId = (p: PopulatedPermission): number =>\n typeof p.role === 'object' ? p.role.id : p.role;\n\n // Re-register \"from\" permissions (fall back to existing \"from\" entries from DB)\n const fromPerms =\n destStage.fromPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.from)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (fromPerms.length > 0) {\n const registered = await async.map(fromPerms, (permission: StagePermission) =>\n stagePermissionsService.register({\n roleId: permission.role,\n action: permission.action,\n fromStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n\n // Re-register \"to\" permissions (fall back to existing \"to\" entries from DB)\n const toPerms =\n destStage.toPermissions ??\n (srcStage?.permissions ?? [])\n .filter((p: PopulatedPermission) => p.actionParameters?.to)\n .map((p: PopulatedPermission) => ({ role: extractRoleId(p), action: p.action }));\n\n if (toPerms.length > 0) {\n const registered = await async.map(toPerms, (permission: StagePermission) =>\n stagePermissionsService.registerTo({\n roleId: permission.role,\n action: permission.action,\n toStage: stageId,\n })\n );\n allPermissionIds.push(...registered.flat().map((p: { id: number }) => p.id));\n }\n } else {\n allPermissionIds = (srcStage?.permissions ?? [])\n .map((p: { id: number }) => p.id)\n .filter(Boolean);\n }\n\n const stage = await strapi.db.query(STAGE_MODEL_UID).update({\n where: { id: stageId },\n data: {\n ...destStage,\n permissions: allPermissionIds,\n },\n });\n\n metrics.sendDidEditStage();\n\n return stage;\n },\n\n async delete(stage: any) {\n // Unregister all permissions related to this stage id\n await this.deleteStagePermissions([stage]);\n\n const deletedStage = await strapi.db.query(STAGE_MODEL_UID).delete({\n where: { id: stage.id },\n });\n\n metrics.sendDidDeleteStage();\n\n return deletedStage;\n },\n\n async deleteMany(stages: any) {\n await this.deleteStagePermissions(stages);\n\n return strapi.db.query(STAGE_MODEL_UID).deleteMany({\n where: { id: { $in: stages.map((s: any) => s.id) } },\n });\n },\n\n async deleteStagePermissions(stages: any) {\n const permissions = stages.map((s: any) => s.permissions || []).flat();\n await stagePermissionsService.unregister(permissions || []);\n },\n\n count({ workflowId }: any = {}) {\n const opts = {} as any;\n\n if (workflowId) {\n opts.where = {\n workflow: workflowId,\n };\n }\n\n return strapi.db.query(STAGE_MODEL_UID).count(opts);\n },\n\n async replaceStages(srcStages: any, destStages: any, contentTypesToMigrate = []) {\n const { created, updated, deleted } = getDiffBetweenStages(srcStages, destStages);\n\n assertAtLeastOneStageRemain(srcStages || [], { created, deleted });\n\n // Update stages and assign entity stages\n return strapi.db.transaction(async ({ trx }) => {\n // Create the new stages\n const createdStages = await this.createMany(created, { fields: ['id'] });\n // Put all the newly created stages ids\n const createdStagesIds = map('id', createdStages);\n\n // Update the workflow stages\n await async.map(updated, (destStage: any) => {\n const srcStage = srcStages.find((s: any) => s.id === destStage.id);\n\n return this.update(srcStage, destStage);\n });\n\n // Delete the stages that are not in the new stages list\n await async.map(deleted, async (stage: any) => {\n // Find the nearest stage in the workflow and newly created stages\n // that is not deleted, prioritizing the previous stages\n const nearestStage = findNearestMatchingStage(\n [...srcStages, ...createdStages],\n srcStages.findIndex((s: any) => s.id === stage.id),\n (targetStage: any) => {\n return !deleted.find((s: any) => s.id === targetStage.id);\n }\n );\n\n // Assign the new stage to entities that had the deleted stage\n await async.map(contentTypesToMigrate, (contentTypeUID: any) => {\n this.updateEntitiesStage(contentTypeUID, {\n fromStageId: stage.id,\n toStageId: nearestStage.id,\n trx,\n });\n });\n\n return this.delete(stage);\n });\n\n return destStages.map((stage: any) => ({\n ...stage,\n id: stage.id ?? createdStagesIds.shift(),\n }));\n });\n },\n\n /**\n * Update the stage of an entity\n */\n async updateEntity(\n entityToUpdate: {\n id: number | string;\n documentId: string;\n locale: string;\n updatedAt: string;\n },\n model: UID.ContentType,\n stageId: any\n ) {\n const stage = await this.findById(stageId);\n const { documentId, locale } = entityToUpdate;\n\n await workflowValidator.validateWorkflowCount();\n\n if (!stage) {\n throw new ApplicationError(`Selected stage does not exist`);\n }\n\n const entity = await strapi.documents(model).update({\n documentId,\n locale,\n // Stage doesn't have DP or i18n enabled, connecting it through the `id`\n // will be safer than relying on the `documentId` + `locale` + `status` transformation\n data: { [ENTITY_STAGE_ATTRIBUTE]: pick(['id'], stage) },\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n // Update the `updated_at` field of the entity, so that the `status` is not considered `Modified`\n // NOTE: `updatedAt` is a protected attribute that can not be modified directly from the query layer\n // hence the knex query builder is used here.\n const { tableName } = strapi.db.metadata.get(model);\n await strapi.db\n .connection(tableName)\n .where({ id: entityToUpdate.id })\n .update({\n updated_at: new Date(entityToUpdate.updatedAt),\n });\n\n metrics.sendDidChangeEntryStage();\n\n return entity;\n },\n\n /**\n * Updates entity stages of a content type:\n * - If fromStageId is undefined, all entities with an existing stage will be assigned the new stage\n * - If fromStageId is null, all entities without a stage will be assigned the new stage\n * - If fromStageId is a number, all entities with that stage will be assigned the new stage\n *\n * For performance reasons we use knex queries directly.\n *\n * @param {string} contentTypeUID\n * @param {number | undefined | null} fromStageId\n * @param {number} toStageId\n * @param {import('knex').Knex.Transaction} trx\n * @returns\n */\n async updateEntitiesStage(contentTypeUID: any, { fromStageId, toStageId }: any) {\n const { attributes, tableName } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n const joinColumn = joinTable.joinColumn.name;\n const invJoinColumn = joinTable.inverseJoinColumn.name;\n\n await workflowValidator.validateWorkflowCount();\n\n return strapi.db.transaction(async ({ trx }) => {\n // Update all already existing links to the new stage\n if (fromStageId === undefined) {\n return strapi.db\n .getConnection()\n .from(joinTable.name)\n .update({ [invJoinColumn]: toStageId })\n .transacting(trx);\n }\n\n // Update all links from the specified stage to the new stage\n const selectStatement = strapi.db\n .getConnection()\n .select({ [joinColumn]: 't1.id', [invJoinColumn]: toStageId })\n .from(`${tableName} as t1`)\n .leftJoin(`${joinTable.name} as t2`, `t1.id`, `t2.${joinColumn}`)\n .where(`t2.${invJoinColumn}`, fromStageId)\n .toSQL();\n\n // Insert rows for all entries of the content type that have the specified stage\n return strapi.db\n .getConnection(joinTable.name)\n .insert(\n strapi.db.connection.raw(\n `(${joinColumn}, ${invJoinColumn}) ${selectStatement.sql}`,\n selectStatement.bindings\n )\n )\n .transacting(trx);\n });\n },\n\n /**\n * Deletes all entity stages of a content type\n * @param {string} contentTypeUID\n * @returns\n */\n async deleteAllEntitiesStage(contentTypeUID: any) {\n const { attributes } = strapi.db.metadata.get(contentTypeUID) as any;\n const joinTable = attributes[ENTITY_STAGE_ATTRIBUTE].joinTable;\n\n // Delete all stage links for the content type\n return strapi.db.transaction(async ({ trx }) =>\n strapi.db.getConnection().from(joinTable.name).delete().transacting(trx)\n );\n },\n };\n};\n\nconst normalizeStageForDiff = (stage: {\n name?: string;\n color?: string;\n fromPermissions?: unknown[];\n toPermissions?: unknown[];\n}) => ({\n ...pick(['name', 'color'], stage),\n fromPermissions: stage.fromPermissions ?? [],\n toPermissions: stage.toPermissions ?? [],\n});\n\n/**\n * Compares two arrays of stages and returns an object indicating the differences.\n *\n * The function compares the `id` properties of each stage in `sourceStages` and `comparisonStages` to determine if the stage is present in both arrays.\n * If a stage with the same `id` is found in both arrays but the `name` property is different, the stage is considered updated.\n * If a stage with a particular `id` is only found in `comparisonStages`, it is considered created.\n * If a stage with a particular `id` is only found in `sourceStages`, it is considered deleted.\n *\n * @typedef {{id: Number, name: String, workflow: Number}} Stage\n * @typedef {{created: Stage[], updated: Stage[], deleted: Stage[]}} DiffStages\n *\n * The DiffStages object has three properties: `created`, `updated`, and `deleted`.\n * `created` is an array of stages that are in `comparisonStages` but not in `sourceStages`.\n * `updated` is an array of stages that have different names in `comparisonStages` and `sourceStages`.\n * `deleted` is an array of stages that are in `sourceStages` but not in `comparisonStages`.\n *\n * @param {Stage[]} sourceStages\n * @param {Stage[]} comparisonStages\n * @returns { DiffStages }\n */\nfunction getDiffBetweenStages(sourceStages: any, comparisonStages: any) {\n const result = comparisonStages.reduce(\n // ...\n\n (acc: any, stageToCompare: any) => {\n const srcStage = sourceStages.find((stage: any) => stage.id === stageToCompare.id);\n\n if (!srcStage) {\n acc.created.push(stageToCompare);\n } else if (!isEqual(normalizeStageForDiff(srcStage), normalizeStageForDiff(stageToCompare))) {\n acc.updated.push(stageToCompare);\n }\n return acc;\n },\n { created: [], updated: [] }\n );\n\n result.deleted = sourceStages.filter(\n (srcStage: any) => !comparisonStages.some((cmpStage: any) => cmpStage.id === srcStage.id)\n );\n\n return result;\n}\n\n/**\n * Asserts that at least one stage remains in the workflow after applying deletions and additions.\n *\n * @param {Array} workflowStages - An array of stages in the current workflow.\n * @param {Object} diffStages - An object containing the stages to be deleted and created.\n * @param {Array} diffStages.deleted - An array of stages that are planned to be deleted from the workflow.\n * @param {Array} diffStages.created - An array of stages that are planned to be created in the workflow.\n *\n * @throws {ValidationError} If the number of remaining stages in the workflow after applying deletions and additions is less than 1.\n */\nfunction assertAtLeastOneStageRemain(workflowStages: any, diffStages: any) {\n const remainingStagesCount =\n workflowStages.length - diffStages.deleted.length + diffStages.created.length;\n if (remainingStagesCount < 1) {\n throw new ValidationError(ERRORS.WORKFLOW_WITHOUT_STAGES);\n }\n}\n\n/**\n * Find the id of the nearest object in an array that matches a condition.\n * Used for searching for the nearest stage that is not deleted.\n * Starts by searching the elements before the index, then the remaining elements in the array.\n *\n * @param {Array} stages\n * @param {Number} startIndex the index to start searching from\n * @param {Function} condition must evaluate to true for the object to be considered a match\n * @returns {Object} stage\n */\nfunction findNearestMatchingStage(stages: any, startIndex: any, condition: any) {\n // Start by searching the elements before the startIndex\n for (let i = startIndex; i >= 0; i -= 1) {\n if (condition(stages[i])) {\n return stages[i];\n }\n }\n\n // If no matching element is found before the startIndex,\n // search the remaining elements in the array\n const remainingArray = stages.slice(startIndex + 1);\n const nearestObject = remainingArray.filter(condition)[0];\n return nearestObject;\n}\n"],"names":["ApplicationError","ValidationError","errors","sanitizedStageFields","sanitizeStageFields","pick","strapi","metrics","getService","stagePermissionsService","workflowValidator","find","workflowId","populate","db","query","STAGE_MODEL_UID","findMany","where","workflow","findById","id","findOne","createMany","stagesList","fields","params","select","stages","Promise","all","map","stage","create","data","async","reduce","_","idx","stageId","allPermissionIds","fromPermissions","length","permission","register","roleId","role","action","fromStage","push","flat","p","toPermissions","registerTo","toStage","update","permissions","sendDidCreateStage","srcStage","destStage","hasPermissionChanges","deleteStagePermissions","extractRoleId","fromPerms","filter","actionParameters","from","registered","toPerms","to","Boolean","sendDidEditStage","delete","deletedStage","sendDidDeleteStage","deleteMany","$in","s","unregister","count","opts","replaceStages","srcStages","destStages","contentTypesToMigrate","created","updated","deleted","getDiffBetweenStages","assertAtLeastOneStageRemain","transaction","trx","createdStages","createdStagesIds","nearestStage","findNearestMatchingStage","findIndex","targetStage","contentTypeUID","updateEntitiesStage","fromStageId","toStageId","shift","updateEntity","entityToUpdate","model","documentId","locale","validateWorkflowCount","entity","documents","ENTITY_STAGE_ATTRIBUTE","tableName","metadata","get","connection","updated_at","Date","updatedAt","sendDidChangeEntryStage","attributes","joinTable","joinColumn","name","invJoinColumn","inverseJoinColumn","undefined","getConnection","transacting","selectStatement","leftJoin","toSQL","insert","raw","sql","bindings","deleteAllEntitiesStage","normalizeStageForDiff","sourceStages","comparisonStages","result","acc","stageToCompare","isEqual","some","cmpStage","workflowStages","diffStages","remainingStagesCount","ERRORS","WORKFLOW_WITHOUT_STAGES","startIndex","condition","i","remainingArray","slice","nearestObject"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
- declare const _default: (args: any) => Promise<void>;
1
+ import { Core } from '@strapi/types';
2
+ declare const _default: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => Promise<void>;
2
5
  export default _default;
3
6
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"yBAwCsB,MAAM,GAAG;AAA/B,wBAiBE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAyCf,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAiBE"}
@@ -1,7 +1,7 @@
1
1
  export declare const WORKFLOW_MODEL_UID = "plugin::review-workflows.workflow";
2
2
  export declare const STAGE_MODEL_UID = "plugin::review-workflows.workflow-stage";
3
3
  /**
4
- * TODO: For V4 compatibility, the old UID was kept, when review workflows was in the admin package
4
+ * TODO: For V4 compatibility, the old UID was kept, when review workflows was in the admin package
5
5
  *
6
6
  * NOTE!: if you change this string you need to change it here too: strapi/packages/core/review-workflows/admin/src/routes/settings/components/Stages.tsx
7
7
  */
@@ -1,6 +1,3 @@
1
- import type { Core } from '@strapi/types';
2
- declare const _default: ({ strapi }: {
3
- strapi: Core.Strapi;
4
- }) => Promise<void>;
1
+ declare const _default: () => Promise<void>;
5
2
  export default _default;
6
3
  //# sourceMappingURL=destroy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAEpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAAiE"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":";AAAA,wBAA8B"}
@@ -1,11 +1,11 @@
1
1
  declare const _default: {
2
2
  routes: {
3
- homepage: import("@strapi/types/dist/core").Router;
3
+ homepage: import("@strapi/types/dist/core/router.js").Router;
4
4
  };
5
- controllers: Record<string, import("@strapi/types/dist/core").Controller>;
5
+ controllers: Record<string, import("@strapi/types/dist/core/controller.js").Controller>;
6
6
  services: {
7
7
  homepage: ({ strapi }: {
8
- strapi: import("@strapi/types/dist/core").Strapi;
8
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
9
9
  }) => {
10
10
  getRecentlyAssignedDocuments(): Promise<import("../../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
11
11
  };
@@ -1,4 +1,4 @@
1
1
  export declare const routes: {
2
- homepage: import("@strapi/types/dist/core").Router;
2
+ homepage: import("@strapi/types/dist/core/router.js").Router;
3
3
  };
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  export declare const services: {
2
2
  homepage: ({ strapi }: {
3
- strapi: import("@strapi/types/dist/core").Strapi;
3
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
4
4
  }) => {
5
5
  getRecentlyAssignedDocuments(): Promise<import("../../../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
6
6
  };
@@ -1,11 +1,11 @@
1
1
  declare const _default: {
2
2
  register: ({ strapi }: {
3
- strapi: import("@strapi/types/dist/core").Strapi;
3
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
4
4
  }) => Promise<void>;
5
- bootstrap: (args: any) => Promise<void>;
6
- destroy: ({ strapi }: {
7
- strapi: import("@strapi/types/dist/core").Strapi;
5
+ bootstrap: ({ strapi }: {
6
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
8
7
  }) => Promise<void>;
8
+ destroy: () => Promise<void>;
9
9
  contentTypes: {
10
10
  workflow: {
11
11
  schema: {
@@ -102,12 +102,12 @@ declare const _default: {
102
102
  };
103
103
  services: {
104
104
  homepage: ({ strapi }: {
105
- strapi: import("@strapi/types/dist/core").Strapi;
105
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
106
106
  }) => {
107
107
  getRecentlyAssignedDocuments(): Promise<import("../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
108
108
  };
109
109
  workflows: ({ strapi }: {
110
- strapi: import("@strapi/types/dist/core").Strapi;
110
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
111
111
  }) => {
112
112
  find(opts?: any): Promise<any[]>;
113
113
  findById(id: any, opts?: {
@@ -125,7 +125,7 @@ declare const _default: {
125
125
  assertStageBelongsToWorkflow(stageId: any, workflow: any): void;
126
126
  };
127
127
  stages: ({ strapi }: {
128
- strapi: import("@strapi/types/dist/core").Strapi;
128
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
129
129
  }) => {
130
130
  find({ workflowId, populate }: any): Promise<any[]>;
131
131
  findById(id: string | number, { populate }?: any): Promise<any>;
@@ -141,12 +141,12 @@ declare const _default: {
141
141
  documentId: string;
142
142
  locale: string;
143
143
  updatedAt: string;
144
- }, model: import("@strapi/types/dist/uid").ContentType, stageId: any): Promise<import("@strapi/types/dist/modules/documents").AnyDocument | null>;
144
+ }, model: import("@strapi/types/dist/uid/index.js").ContentType, stageId: any): Promise<import("@strapi/types/dist/modules/documents/index.js").AnyDocument | null>;
145
145
  updateEntitiesStage(contentTypeUID: any, { fromStageId, toStageId }: any): Promise<number | number[]>;
146
146
  deleteAllEntitiesStage(contentTypeUID: any): Promise<number>;
147
147
  };
148
148
  'stage-permissions': ({ strapi }: {
149
- strapi: import("@strapi/types/dist/core").Strapi;
149
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
150
150
  }) => {
151
151
  register({ roleId, action, fromStage, }: {
152
152
  roleId: number;
@@ -185,18 +185,18 @@ declare const _default: {
185
185
  }): boolean;
186
186
  };
187
187
  assignees: ({ strapi }: {
188
- strapi: import("@strapi/types/dist/core").Strapi;
188
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
189
189
  }) => {
190
- findEntityAssigneeId(id: string | number, model: import("@strapi/types/dist/uid").ContentType): Promise<any>;
190
+ findEntityAssigneeId(id: string | number, model: import("@strapi/types/dist/uid/index.js").ContentType): Promise<any>;
191
191
  updateEntityAssignee(entityToUpdate: {
192
192
  id: number | string;
193
193
  documentId: string;
194
194
  locale: string;
195
195
  updatedAt: string;
196
- }, model: import("@strapi/types/dist/uid").ContentType, assigneeId: string | null): Promise<import("@strapi/types/dist/modules/documents").AnyDocument | null>;
196
+ }, model: import("@strapi/types/dist/uid/index.js").ContentType, assigneeId: string | null): Promise<import("@strapi/types/dist/modules/documents/index.js").AnyDocument | null>;
197
197
  };
198
198
  validation: ({ strapi }: {
199
- strapi: import("@strapi/types/dist/core").Strapi;
199
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
200
200
  }) => {
201
201
  limits: {
202
202
  numberOfWorkflows: number;
@@ -208,9 +208,9 @@ declare const _default: {
208
208
  validateWorkflowCount(countAddedWorkflows?: number): Promise<void>;
209
209
  };
210
210
  'document-service-middlewares': () => {
211
- assignStageOnCreate: import("@strapi/types/dist/modules/documents/middleware").Middleware;
212
- handleStageOnUpdate: import("@strapi/types/dist/modules/documents/middleware").Middleware;
213
- checkStageBeforePublish: import("@strapi/types/dist/modules/documents/middleware").Middleware;
211
+ assignStageOnCreate: import("@strapi/types/dist/modules/documents/middleware.js").Middleware;
212
+ handleStageOnUpdate: import("@strapi/types/dist/modules/documents/middleware.js").Middleware;
213
+ checkStageBeforePublish: import("@strapi/types/dist/modules/documents/middleware.js").Middleware;
214
214
  };
215
215
  'workflow-metrics': {
216
216
  sendDidCreateStage: () => Promise<void>;
@@ -223,7 +223,7 @@ declare const _default: {
223
223
  sendDidEditAssignee: (fromId: any, toId: any) => Promise<void>;
224
224
  };
225
225
  'workflow-weekly-metrics': ({ strapi }: {
226
- strapi: import("@strapi/types/dist/core").Strapi;
226
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
227
227
  }) => {
228
228
  computeMetrics(): Promise<{
229
229
  numberOfActiveWorkflows: number;
@@ -254,7 +254,7 @@ declare const _default: {
254
254
  };
255
255
  };
256
256
  routes: {
257
- homepage: import("@strapi/types/dist/core").Router;
257
+ homepage: import("@strapi/types/dist/core/router.js").Router;
258
258
  'review-workflows': {
259
259
  type: string;
260
260
  routes: {
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;yBAsGzB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBA6BE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;yBAqGzB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBA4BE"}
@@ -1,5 +1,5 @@
1
1
  declare const _default: {
2
- homepage: import("@strapi/types/dist/core").Router;
2
+ homepage: import("@strapi/types/dist/core/router.js").Router;
3
3
  'review-workflows': {
4
4
  type: string;
5
5
  routes: {
@@ -1,4 +1,4 @@
1
- import type { Core, UID, Modules } from '@strapi/types';
1
+ import type { Core, UID } from '@strapi/types';
2
2
  declare const _default: ({ strapi }: {
3
3
  strapi: Core.Strapi;
4
4
  }) => {
@@ -11,7 +11,7 @@ declare const _default: ({ strapi }: {
11
11
  documentId: string;
12
12
  locale: string;
13
13
  updatedAt: string;
14
- }, model: UID.ContentType, assigneeId: string | null): Promise<Modules.Documents.AnyDocument | null>;
14
+ }, model: UID.ContentType, assigneeId: string | null): Promise<import("@strapi/types/dist/modules/documents/index.js").AnyDocument | null>;
15
15
  };
16
16
  export default _default;
17
17
  //# sourceMappingURL=assignees.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assignees.d.ts","sourceRoot":"","sources":["../../../../server/src/services/assignees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;yBAQxC,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;6BAIhB,MAAM,GAAG,MAAM,SAAS,GAAG,CAAC,WAAW;IAUtE;;OAEG;yCAEe;QACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,SACM,GAAG,CAAC,WAAW,cACV,MAAM,GAAG,IAAI;;AAzB/B,wBA8DE"}
1
+ {"version":3,"file":"assignees.d.ts","sourceRoot":"","sources":["../../../../server/src/services/assignees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;yBAQ/B,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;6BAIhB,MAAM,GAAG,MAAM,SAAS,GAAG,CAAC,WAAW;IAUtE;;OAEG;yCAEe;QACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,SACM,GAAG,CAAC,WAAW,cACV,MAAM,GAAG,IAAI;;AAzB/B,wBA8DE"}