@webiny/api-workflows 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.9f53ea597d

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 (40) hide show
  1. package/domain/workflowState/WorkflowState.d.ts +1 -0
  2. package/domain/workflowState/WorkflowState.js +3 -0
  3. package/domain/workflowState/WorkflowState.js.map +1 -1
  4. package/domain/workflowState/WorkflowStateMapper.js +4 -2
  5. package/domain/workflowState/WorkflowStateMapper.js.map +1 -1
  6. package/domain/workflowState/abstractions.d.ts +3 -0
  7. package/domain/workflowState/abstractions.js.map +1 -1
  8. package/domain/workflowState/stateModel.js +1 -0
  9. package/domain/workflowState/stateModel.js.map +1 -1
  10. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.d.ts +3 -1
  11. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js +10 -2
  12. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js.map +1 -1
  13. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.d.ts +9 -0
  14. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.js +13 -0
  15. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.js.map +1 -0
  16. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.d.ts +13 -0
  17. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.js +5 -0
  18. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.js.map +1 -0
  19. package/features/workflowState/CreateWorkflowState/feature.js +2 -0
  20. package/features/workflowState/CreateWorkflowState/feature.js.map +1 -1
  21. package/features/workflowState/CreateWorkflowState/index.d.ts +1 -0
  22. package/features/workflowState/CreateWorkflowState/index.js +1 -0
  23. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.d.ts +9 -0
  24. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.js +13 -0
  25. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.js.map +1 -0
  26. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.d.ts +3 -1
  27. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js +38 -7
  28. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js.map +1 -1
  29. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.d.ts +8 -0
  30. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.js +5 -0
  31. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.js.map +1 -0
  32. package/features/workflowState/ListWorkflowStates/feature.js +2 -0
  33. package/features/workflowState/ListWorkflowStates/feature.js.map +1 -1
  34. package/features/workflowState/ListWorkflowStates/index.d.ts +1 -0
  35. package/features/workflowState/ListWorkflowStates/index.js +1 -0
  36. package/graphql/validation/listWorkflowStates.d.ts +1 -1
  37. package/graphql/validation/listWorkflows.d.ts +1 -1
  38. package/graphql/workflowState.js +1 -0
  39. package/graphql/workflowState.js.map +1 -1
  40. package/package.json +16 -16
@@ -22,6 +22,7 @@ export declare class WorkflowState implements IWorkflowState {
22
22
  get savedOn(): Date;
23
23
  get createdBy(): IWorkflowStateIdentity;
24
24
  get savedBy(): IWorkflowStateIdentity;
25
+ get targetContext(): import("@webiny/api/types.js").GenericRecord;
25
26
  get done(): boolean;
26
27
  /**
27
28
  * Current step can be:
@@ -57,6 +57,9 @@ class WorkflowState {
57
57
  get savedBy() {
58
58
  return this.record.savedBy;
59
59
  }
60
+ get targetContext() {
61
+ return this.record.targetContext;
62
+ }
60
63
  get done() {
61
64
  if (0 === this.record.steps.length) return false;
62
65
  return this.record.steps.every((step)=>step.state === WorkflowStateRecordState.approved);
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/WorkflowState.js","sources":["../../../src/domain/workflowState/WorkflowState.ts"],"sourcesContent":["import type {\n IWorkflowState,\n IWorkflowStateRecord,\n IWorkflowStateIdentity,\n IEnrichedWorkflowStateRecordStep,\n IWorkflowStateRecordStep\n} from \"./abstractions.js\";\nimport { WorkflowStateRecordState } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { IWorkflowStepTeam } from \"../workflow/abstractions.js\";\nimport {\n WorkflowStateNotAuthorizedError,\n WorkflowStateNoPendingStepError,\n WorkflowStateStepCannotReviewError,\n WorkflowStateStepCannotTakeOverError,\n WorkflowStateStepNotStepOwnerError,\n WorkflowStateInReviewError,\n WorkflowStateRejectedError,\n WorkflowStateNoCurrentStepError,\n WorkflowStateNotInReview\n} from \"./errors.js\";\nimport { canReview } from \"./guards/canReview.js\";\nimport { isRejected } from \"./guards/isRejected.js\";\nimport { canTakeOver } from \"./guards/canTakeOver.js\";\nimport { isInReview } from \"./guards/isInReview.js\";\nimport { isStepOwner } from \"./guards/isStepOwner.js\";\n\ninterface IEnrichStepWithPermissionParams {\n createdBy: Pick<IWorkflowStateIdentity, \"id\">;\n step: IWorkflowStateRecordStep;\n}\n\nexport class WorkflowState implements IWorkflowState {\n constructor(\n private record: IWorkflowStateRecord,\n private teams: IWorkflowStepTeam[],\n private currentIdentity: IWorkflowStateIdentity\n ) {}\n\n get id() {\n return this.record.id;\n }\n\n get app() {\n return this.record.app;\n }\n\n get title() {\n return this.record.title;\n }\n\n get workflowId() {\n return this.record.workflowId;\n }\n\n get targetId() {\n return this.record.targetId;\n }\n\n get targetRevisionId() {\n return this.record.targetRevisionId;\n }\n\n get isActive() {\n return this.record.isActive;\n }\n\n get comment() {\n return this.record.comment;\n }\n\n get state() {\n return this.record.state;\n }\n\n get steps() {\n return this.record.steps.map(step => {\n return this.enrichStep({ createdBy: this.record.createdBy, step });\n });\n }\n\n get createdOn() {\n return this.record.createdOn;\n }\n\n get savedOn() {\n return this.record.savedOn;\n }\n\n get createdBy() {\n return this.record.createdBy;\n }\n\n get savedBy() {\n return this.record.savedBy;\n }\n\n get done(): boolean {\n /**\n * A just-in-case check.\n */\n if (this.record.steps.length === 0) {\n return false;\n }\n return this.record.steps.every(step => {\n return step.state === WorkflowStateRecordState.approved;\n });\n }\n\n /**\n * Current step can be:\n * - in review step\n * - rejected step - can only be one\n * - first pending step\n * - last approved step\n */\n get currentStep(): IEnrichedWorkflowStateRecordStep {\n const steps = this.steps;\n const inReview = steps.find(step => step.state === WorkflowStateRecordState.inReview);\n if (inReview) {\n return inReview;\n }\n\n const rejected = steps.find(step => step.state === WorkflowStateRecordState.rejected);\n if (rejected) {\n return rejected;\n }\n const pending = steps.find(step => step.state === WorkflowStateRecordState.pending);\n if (pending) {\n return pending;\n }\n const approved = steps\n .toReversed()\n .find(step => step.state === WorkflowStateRecordState.approved);\n if (approved) {\n return approved;\n }\n throw new WorkflowStateNoCurrentStepError(steps);\n }\n\n get nextStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex === -1) {\n return null;\n }\n return steps[currentIndex + 1] || null;\n }\n\n get previousStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex <= 0) {\n return null;\n }\n return steps[currentIndex - 1] || null;\n }\n\n /**\n * Active step is the one that is currently \"inReview\". If there is a rejected step, returns null.\n */\n getActiveStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const hasRejected = steps.some(step => {\n return step.state === WorkflowStateRecordState.rejected;\n });\n if (hasRejected) {\n return null;\n }\n const step = steps.find(step => {\n return step.state === WorkflowStateRecordState.inReview;\n });\n return step || null;\n }\n\n start(): Result<void, WorkflowState.Error> {\n const stepResult = this.getPendingStep();\n if (stepResult.isFail()) {\n return Result.fail(stepResult.error);\n }\n\n const step = stepResult.value;\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n this.updateRecord({\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n\n return Result.ok();\n }\n\n takeOver(): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot take over a workflow state that is not in review.`\n )\n );\n }\n if (!canTakeOver(step)) {\n return Result.fail(new WorkflowStateStepCannotTakeOverError(step));\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity\n });\n this.updateRecord({\n savedBy: identity\n });\n\n return Result.ok();\n }\n\n approve(comment?: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n /**\n * Step cannot be found - all steps are either approved or rejected.\n */\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot approve a workflow state that is not in review.`\n )\n );\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.approveStep(step.id, comment);\n\n const nextStep = this.getNextStep(step.id);\n\n this.updateRecord({\n state: nextStep ? WorkflowStateRecordState.pending : WorkflowStateRecordState.approved\n });\n\n return Result.ok();\n }\n\n reject(comment: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotInReview(\n `Cannot reject a workflow state that is not in review.`,\n this\n )\n );\n }\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.rejectStep(step.id, comment);\n this.updateRecord({\n state: WorkflowStateRecordState.rejected\n });\n\n return Result.ok();\n }\n\n private getPendingStep(): Result<\n IEnrichedWorkflowStateRecordStep,\n WorkflowStateRejectedError | WorkflowStateInReviewError | WorkflowStateNoPendingStepError\n > {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n if (isInReview(this.record)) {\n return Result.fail(new WorkflowStateInReviewError(this.record));\n }\n for (const step of this.steps) {\n if (step.state === WorkflowStateRecordState.pending) {\n return Result.ok(step);\n }\n }\n return Result.fail(new WorkflowStateNoPendingStepError());\n }\n\n private updateRecord(record: Partial<Omit<IWorkflowStateRecord, \"id\">>): void {\n Object.assign(this.record, record);\n }\n\n private updateStep(id: string, input: Partial<Omit<IWorkflowStateRecordStep, \"id\">>): void {\n const step = this.record.steps.find(s => s.id === id);\n if (!step) {\n throw new Error(`Step with ID \"${id}\" not found.`);\n }\n Object.assign(step, {\n savedBy: {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n },\n ...input\n });\n }\n\n private approveStep(id: string, comment?: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.approved,\n comment\n });\n }\n\n private rejectStep(id: string, comment: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.rejected,\n comment\n });\n }\n\n private getNextStep(currentStepId: string): IWorkflowStateRecordStep | undefined {\n const index = this.record.steps.findIndex(s => s.id === currentStepId);\n if (index === -1) {\n return undefined;\n }\n return this.record.steps[index + 1];\n }\n\n private enrichStep(params: IEnrichStepWithPermissionParams): IEnrichedWorkflowStateRecordStep {\n const { step, createdBy } = params;\n const identity = this.currentIdentity;\n /**\n * User who created the workflow state cannot take part in reviewing it.\n */\n if (createdBy.id === identity.id) {\n return {\n ...step,\n isOwner: false,\n canTakeOver: false,\n canReview: false\n };\n }\n /**\n * Current user is step owner - they started the review.\n */\n const isOwner = step.savedBy?.id === identity.id;\n /**\n * Can current user actually review this step?\n */\n const canReview = step.teams.some(team => {\n return this.teams.some(t => {\n return t.id === team.id;\n });\n });\n /**\n * Can current user take over the review from another reviewer?\n * Taking over is only possible if current user did not start the review of the step - and review was actually started.\n */\n const canTakeOver =\n canReview && !!step.savedBy?.id && step.state === WorkflowStateRecordState.inReview;\n\n return {\n ...step,\n canTakeOver: !isOwner ? canTakeOver : false,\n isOwner,\n canReview\n };\n }\n\n toRecord(): IWorkflowStateRecord {\n return this.record;\n }\n}\n\nexport namespace WorkflowState {\n export type Error =\n | WorkflowStateNotAuthorizedError\n | WorkflowStateNoPendingStepError\n | WorkflowStateStepCannotReviewError\n | WorkflowStateStepCannotTakeOverError\n | WorkflowStateStepNotStepOwnerError\n | WorkflowStateInReviewError\n | WorkflowStateNotInReview\n | WorkflowStateRejectedError\n | WorkflowStateNoCurrentStepError;\n}\n"],"names":["WorkflowState","record","teams","currentIdentity","step","WorkflowStateRecordState","steps","inReview","rejected","pending","approved","WorkflowStateNoCurrentStepError","currentStep","currentIndex","hasRejected","stepResult","Result","canReview","WorkflowStateStepCannotReviewError","identity","isRejected","WorkflowStateRejectedError","WorkflowStateNotAuthorizedError","canTakeOver","WorkflowStateStepCannotTakeOverError","comment","isStepOwner","WorkflowStateStepNotStepOwnerError","nextStep","WorkflowStateNotInReview","isInReview","WorkflowStateInReviewError","WorkflowStateNoPendingStepError","Object","id","input","s","Error","currentStepId","index","params","createdBy","isOwner","team","t"],"mappings":"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"}
1
+ {"version":3,"file":"domain/workflowState/WorkflowState.js","sources":["../../../src/domain/workflowState/WorkflowState.ts"],"sourcesContent":["import type {\n IWorkflowState,\n IWorkflowStateRecord,\n IWorkflowStateIdentity,\n IEnrichedWorkflowStateRecordStep,\n IWorkflowStateRecordStep\n} from \"./abstractions.js\";\nimport { WorkflowStateRecordState } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { IWorkflowStepTeam } from \"../workflow/abstractions.js\";\nimport {\n WorkflowStateNotAuthorizedError,\n WorkflowStateNoPendingStepError,\n WorkflowStateStepCannotReviewError,\n WorkflowStateStepCannotTakeOverError,\n WorkflowStateStepNotStepOwnerError,\n WorkflowStateInReviewError,\n WorkflowStateRejectedError,\n WorkflowStateNoCurrentStepError,\n WorkflowStateNotInReview\n} from \"./errors.js\";\nimport { canReview } from \"./guards/canReview.js\";\nimport { isRejected } from \"./guards/isRejected.js\";\nimport { canTakeOver } from \"./guards/canTakeOver.js\";\nimport { isInReview } from \"./guards/isInReview.js\";\nimport { isStepOwner } from \"./guards/isStepOwner.js\";\n\ninterface IEnrichStepWithPermissionParams {\n createdBy: Pick<IWorkflowStateIdentity, \"id\">;\n step: IWorkflowStateRecordStep;\n}\n\nexport class WorkflowState implements IWorkflowState {\n constructor(\n private record: IWorkflowStateRecord,\n private teams: IWorkflowStepTeam[],\n private currentIdentity: IWorkflowStateIdentity\n ) {}\n\n get id() {\n return this.record.id;\n }\n\n get app() {\n return this.record.app;\n }\n\n get title() {\n return this.record.title;\n }\n\n get workflowId() {\n return this.record.workflowId;\n }\n\n get targetId() {\n return this.record.targetId;\n }\n\n get targetRevisionId() {\n return this.record.targetRevisionId;\n }\n\n get isActive() {\n return this.record.isActive;\n }\n\n get comment() {\n return this.record.comment;\n }\n\n get state() {\n return this.record.state;\n }\n\n get steps() {\n return this.record.steps.map(step => {\n return this.enrichStep({ createdBy: this.record.createdBy, step });\n });\n }\n\n get createdOn() {\n return this.record.createdOn;\n }\n\n get savedOn() {\n return this.record.savedOn;\n }\n\n get createdBy() {\n return this.record.createdBy;\n }\n\n get savedBy() {\n return this.record.savedBy;\n }\n\n get targetContext() {\n return this.record.targetContext;\n }\n\n get done(): boolean {\n /**\n * A just-in-case check.\n */\n if (this.record.steps.length === 0) {\n return false;\n }\n return this.record.steps.every(step => {\n return step.state === WorkflowStateRecordState.approved;\n });\n }\n\n /**\n * Current step can be:\n * - in review step\n * - rejected step - can only be one\n * - first pending step\n * - last approved step\n */\n get currentStep(): IEnrichedWorkflowStateRecordStep {\n const steps = this.steps;\n const inReview = steps.find(step => step.state === WorkflowStateRecordState.inReview);\n if (inReview) {\n return inReview;\n }\n\n const rejected = steps.find(step => step.state === WorkflowStateRecordState.rejected);\n if (rejected) {\n return rejected;\n }\n const pending = steps.find(step => step.state === WorkflowStateRecordState.pending);\n if (pending) {\n return pending;\n }\n const approved = steps\n .toReversed()\n .find(step => step.state === WorkflowStateRecordState.approved);\n if (approved) {\n return approved;\n }\n throw new WorkflowStateNoCurrentStepError(steps);\n }\n\n get nextStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex === -1) {\n return null;\n }\n return steps[currentIndex + 1] || null;\n }\n\n get previousStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex <= 0) {\n return null;\n }\n return steps[currentIndex - 1] || null;\n }\n\n /**\n * Active step is the one that is currently \"inReview\". If there is a rejected step, returns null.\n */\n getActiveStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const hasRejected = steps.some(step => {\n return step.state === WorkflowStateRecordState.rejected;\n });\n if (hasRejected) {\n return null;\n }\n const step = steps.find(step => {\n return step.state === WorkflowStateRecordState.inReview;\n });\n return step || null;\n }\n\n start(): Result<void, WorkflowState.Error> {\n const stepResult = this.getPendingStep();\n if (stepResult.isFail()) {\n return Result.fail(stepResult.error);\n }\n\n const step = stepResult.value;\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n this.updateRecord({\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n\n return Result.ok();\n }\n\n takeOver(): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot take over a workflow state that is not in review.`\n )\n );\n }\n if (!canTakeOver(step)) {\n return Result.fail(new WorkflowStateStepCannotTakeOverError(step));\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity\n });\n this.updateRecord({\n savedBy: identity\n });\n\n return Result.ok();\n }\n\n approve(comment?: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n /**\n * Step cannot be found - all steps are either approved or rejected.\n */\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot approve a workflow state that is not in review.`\n )\n );\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.approveStep(step.id, comment);\n\n const nextStep = this.getNextStep(step.id);\n\n this.updateRecord({\n state: nextStep ? WorkflowStateRecordState.pending : WorkflowStateRecordState.approved\n });\n\n return Result.ok();\n }\n\n reject(comment: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotInReview(\n `Cannot reject a workflow state that is not in review.`,\n this\n )\n );\n }\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.rejectStep(step.id, comment);\n this.updateRecord({\n state: WorkflowStateRecordState.rejected\n });\n\n return Result.ok();\n }\n\n private getPendingStep(): Result<\n IEnrichedWorkflowStateRecordStep,\n WorkflowStateRejectedError | WorkflowStateInReviewError | WorkflowStateNoPendingStepError\n > {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n if (isInReview(this.record)) {\n return Result.fail(new WorkflowStateInReviewError(this.record));\n }\n for (const step of this.steps) {\n if (step.state === WorkflowStateRecordState.pending) {\n return Result.ok(step);\n }\n }\n return Result.fail(new WorkflowStateNoPendingStepError());\n }\n\n private updateRecord(record: Partial<Omit<IWorkflowStateRecord, \"id\">>): void {\n Object.assign(this.record, record);\n }\n\n private updateStep(id: string, input: Partial<Omit<IWorkflowStateRecordStep, \"id\">>): void {\n const step = this.record.steps.find(s => s.id === id);\n if (!step) {\n throw new Error(`Step with ID \"${id}\" not found.`);\n }\n Object.assign(step, {\n savedBy: {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n },\n ...input\n });\n }\n\n private approveStep(id: string, comment?: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.approved,\n comment\n });\n }\n\n private rejectStep(id: string, comment: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.rejected,\n comment\n });\n }\n\n private getNextStep(currentStepId: string): IWorkflowStateRecordStep | undefined {\n const index = this.record.steps.findIndex(s => s.id === currentStepId);\n if (index === -1) {\n return undefined;\n }\n return this.record.steps[index + 1];\n }\n\n private enrichStep(params: IEnrichStepWithPermissionParams): IEnrichedWorkflowStateRecordStep {\n const { step, createdBy } = params;\n const identity = this.currentIdentity;\n /**\n * User who created the workflow state cannot take part in reviewing it.\n */\n if (createdBy.id === identity.id) {\n return {\n ...step,\n isOwner: false,\n canTakeOver: false,\n canReview: false\n };\n }\n /**\n * Current user is step owner - they started the review.\n */\n const isOwner = step.savedBy?.id === identity.id;\n /**\n * Can current user actually review this step?\n */\n const canReview = step.teams.some(team => {\n return this.teams.some(t => {\n return t.id === team.id;\n });\n });\n /**\n * Can current user take over the review from another reviewer?\n * Taking over is only possible if current user did not start the review of the step - and review was actually started.\n */\n const canTakeOver =\n canReview && !!step.savedBy?.id && step.state === WorkflowStateRecordState.inReview;\n\n return {\n ...step,\n canTakeOver: !isOwner ? canTakeOver : false,\n isOwner,\n canReview\n };\n }\n\n toRecord(): IWorkflowStateRecord {\n return this.record;\n }\n}\n\nexport namespace WorkflowState {\n export type Error =\n | WorkflowStateNotAuthorizedError\n | WorkflowStateNoPendingStepError\n | WorkflowStateStepCannotReviewError\n | WorkflowStateStepCannotTakeOverError\n | WorkflowStateStepNotStepOwnerError\n | WorkflowStateInReviewError\n | WorkflowStateNotInReview\n | WorkflowStateRejectedError\n | WorkflowStateNoCurrentStepError;\n}\n"],"names":["WorkflowState","record","teams","currentIdentity","step","WorkflowStateRecordState","steps","inReview","rejected","pending","approved","WorkflowStateNoCurrentStepError","currentStep","currentIndex","hasRejected","stepResult","Result","canReview","WorkflowStateStepCannotReviewError","identity","isRejected","WorkflowStateRejectedError","WorkflowStateNotAuthorizedError","canTakeOver","WorkflowStateStepCannotTakeOverError","comment","isStepOwner","WorkflowStateStepNotStepOwnerError","nextStep","WorkflowStateNotInReview","isInReview","WorkflowStateInReviewError","WorkflowStateNoPendingStepError","Object","id","input","s","Error","currentStepId","index","params","createdBy","isOwner","team","t"],"mappings":"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"}
@@ -15,7 +15,8 @@ class WorkflowStateMapperImpl {
15
15
  savedBy: input.savedBy,
16
16
  createdBy: input.createdBy,
17
17
  savedOn: new Date(input.savedOn),
18
- createdOn: new Date(input.createdOn)
18
+ createdOn: new Date(input.createdOn),
19
+ targetContext: input.values.targetContext || {}
19
20
  };
20
21
  }
21
22
  toCmsEntry(input) {
@@ -28,7 +29,8 @@ class WorkflowStateMapperImpl {
28
29
  steps: input.steps,
29
30
  app: input.app,
30
31
  state: input.state,
31
- comment: input.comment
32
+ comment: input.comment,
33
+ targetContext: input.targetContext || {}
32
34
  };
33
35
  }
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/WorkflowStateMapper.js","sources":["../../../src/domain/workflowState/WorkflowStateMapper.ts"],"sourcesContent":["import type {\n IWorkflowStateMapper,\n IWorkflowStateTransformerFromCmsEntryInput,\n IWorkflowStateTransformerFromCmsEntryOutput,\n IWorkflowStateTransformerToCmsEntryInput,\n IWorkflowStateTransformerToCmsEntryOutput\n} from \"./abstractions.js\";\nimport { WorkflowStateMapper as WorkflowStateMapperAbstraction } from \"./abstractions.js\";\n\nclass WorkflowStateMapperImpl implements IWorkflowStateMapper {\n public fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput {\n return {\n id: input.id,\n workflowId: input.values.workflowId,\n title: input.values.title,\n targetId: input.values.targetId,\n targetRevisionId: input.values.targetRevisionId,\n steps: input.values.steps,\n isActive: input.values.isActive,\n app: input.values.app,\n state: input.values.state,\n comment: input.values.comment,\n savedBy: input.savedBy,\n createdBy: input.createdBy,\n savedOn: new Date(input.savedOn),\n createdOn: new Date(input.createdOn)\n };\n }\n\n public toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput {\n return {\n isActive: input.isActive,\n title: input.title,\n workflowId: input.workflowId,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId,\n steps: input.steps,\n app: input.app,\n state: input.state,\n comment: input.comment\n };\n }\n}\n\nexport const WorkflowStateMapper = WorkflowStateMapperAbstraction.createImplementation({\n implementation: WorkflowStateMapperImpl,\n dependencies: []\n});\n"],"names":["WorkflowStateMapperImpl","input","Date","WorkflowStateMapper","WorkflowStateMapperAbstraction"],"mappings":";AASA,MAAMA;IACK,aACHC,KAAiD,EACN;QAC3C,OAAO;YACH,IAAIA,MAAM,EAAE;YACZ,YAAYA,MAAM,MAAM,CAAC,UAAU;YACnC,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,kBAAkBA,MAAM,MAAM,CAAC,gBAAgB;YAC/C,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,KAAKA,MAAM,MAAM,CAAC,GAAG;YACrB,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,SAASA,MAAM,MAAM,CAAC,OAAO;YAC7B,SAASA,MAAM,OAAO;YACtB,WAAWA,MAAM,SAAS;YAC1B,SAAS,IAAIC,KAAKD,MAAM,OAAO;YAC/B,WAAW,IAAIC,KAAKD,MAAM,SAAS;QACvC;IACJ;IAEO,WACHA,KAA+C,EACN;QACzC,OAAO;YACH,UAAUA,MAAM,QAAQ;YACxB,OAAOA,MAAM,KAAK;YAClB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB;YACxC,OAAOA,MAAM,KAAK;YAClB,KAAKA,MAAM,GAAG;YACd,OAAOA,MAAM,KAAK;YAClB,SAASA,MAAM,OAAO;QAC1B;IACJ;AACJ;AAEO,MAAME,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"domain/workflowState/WorkflowStateMapper.js","sources":["../../../src/domain/workflowState/WorkflowStateMapper.ts"],"sourcesContent":["import type {\n IWorkflowStateMapper,\n IWorkflowStateTransformerFromCmsEntryInput,\n IWorkflowStateTransformerFromCmsEntryOutput,\n IWorkflowStateTransformerToCmsEntryInput,\n IWorkflowStateTransformerToCmsEntryOutput\n} from \"./abstractions.js\";\nimport { WorkflowStateMapper as WorkflowStateMapperAbstraction } from \"./abstractions.js\";\n\nclass WorkflowStateMapperImpl implements IWorkflowStateMapper {\n public fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput {\n return {\n id: input.id,\n workflowId: input.values.workflowId,\n title: input.values.title,\n targetId: input.values.targetId,\n targetRevisionId: input.values.targetRevisionId,\n steps: input.values.steps,\n isActive: input.values.isActive,\n app: input.values.app,\n state: input.values.state,\n comment: input.values.comment,\n savedBy: input.savedBy,\n createdBy: input.createdBy,\n savedOn: new Date(input.savedOn),\n createdOn: new Date(input.createdOn),\n targetContext: input.values.targetContext || {}\n };\n }\n\n public toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput {\n return {\n isActive: input.isActive,\n title: input.title,\n workflowId: input.workflowId,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId,\n steps: input.steps,\n app: input.app,\n state: input.state,\n comment: input.comment,\n targetContext: input.targetContext || {}\n };\n }\n}\n\nexport const WorkflowStateMapper = WorkflowStateMapperAbstraction.createImplementation({\n implementation: WorkflowStateMapperImpl,\n dependencies: []\n});\n"],"names":["WorkflowStateMapperImpl","input","Date","WorkflowStateMapper","WorkflowStateMapperAbstraction"],"mappings":";AASA,MAAMA;IACK,aACHC,KAAiD,EACN;QAC3C,OAAO;YACH,IAAIA,MAAM,EAAE;YACZ,YAAYA,MAAM,MAAM,CAAC,UAAU;YACnC,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,kBAAkBA,MAAM,MAAM,CAAC,gBAAgB;YAC/C,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,KAAKA,MAAM,MAAM,CAAC,GAAG;YACrB,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,SAASA,MAAM,MAAM,CAAC,OAAO;YAC7B,SAASA,MAAM,OAAO;YACtB,WAAWA,MAAM,SAAS;YAC1B,SAAS,IAAIC,KAAKD,MAAM,OAAO;YAC/B,WAAW,IAAIC,KAAKD,MAAM,SAAS;YACnC,eAAeA,MAAM,MAAM,CAAC,aAAa,IAAI,CAAC;QAClD;IACJ;IAEO,WACHA,KAA+C,EACN;QACzC,OAAO;YACH,UAAUA,MAAM,QAAQ;YACxB,OAAOA,MAAM,KAAK;YAClB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB;YACxC,OAAOA,MAAM,KAAK;YAClB,KAAKA,MAAM,GAAG;YACd,OAAOA,MAAM,KAAK;YAClB,SAASA,MAAM,OAAO;YACtB,eAAeA,MAAM,aAAa,IAAI,CAAC;QAC3C;IACJ;AACJ;AAEO,MAAME,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -1,5 +1,6 @@
1
1
  import type { CmsEntry, CmsModel } from "@webiny/api-headless-cms/types";
2
2
  import type { IWorkflowStep } from "../workflow/abstractions.js";
3
+ import type { GenericRecord } from "@webiny/api/types.js";
3
4
  export declare enum WorkflowStateRecordState {
4
5
  pending = "pending",
5
6
  inReview = "inReview",
@@ -31,6 +32,7 @@ export interface IWorkflowStateRecord<Steps extends IWorkflowStateRecordStep = I
31
32
  savedOn: Date;
32
33
  createdBy: IWorkflowStateIdentity;
33
34
  savedBy: IWorkflowStateIdentity;
35
+ targetContext: GenericRecord;
34
36
  }
35
37
  export interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {
36
38
  isOwner: boolean;
@@ -52,6 +54,7 @@ export interface IWorkflowState {
52
54
  readonly savedOn: Date;
53
55
  readonly createdBy: IWorkflowStateIdentity;
54
56
  readonly savedBy: IWorkflowStateIdentity;
57
+ readonly targetContext: GenericRecord;
55
58
  readonly done: boolean;
56
59
  readonly currentStep: IEnrichedWorkflowStateRecordStep;
57
60
  readonly nextStep: IEnrichedWorkflowStateRecordStep | null;
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/abstractions.js","sources":["../../../src/domain/workflowState/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IWorkflowStep } from \"../workflow/abstractions.js\";\n\nexport enum WorkflowStateRecordState {\n pending = \"pending\",\n inReview = \"inReview\",\n approved = \"approved\",\n rejected = \"rejected\"\n}\n\nexport interface IWorkflowStateIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\nexport interface IWorkflowStateRecordStep extends IWorkflowStep {\n state: WorkflowStateRecordState;\n comment: string | null;\n savedBy: IWorkflowStateIdentity | null;\n}\n\nexport interface IWorkflowStateRecord<\n Steps extends IWorkflowStateRecordStep = IWorkflowStateRecordStep\n> {\n id: string;\n app: string;\n title: string;\n workflowId: string;\n targetId: string;\n targetRevisionId: string;\n isActive: boolean;\n comment: string | undefined;\n state: WorkflowStateRecordState;\n steps: Steps[];\n createdOn: Date;\n savedOn: Date;\n createdBy: IWorkflowStateIdentity;\n savedBy: IWorkflowStateIdentity;\n}\n\nexport interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {\n isOwner: boolean;\n canTakeOver: boolean;\n canReview: boolean;\n}\n\nexport interface IWorkflowState {\n readonly id: string;\n readonly app: string;\n readonly title: string;\n readonly workflowId: string;\n readonly targetId: string;\n readonly targetRevisionId: string;\n readonly isActive: boolean;\n readonly comment: string | undefined;\n readonly state: WorkflowStateRecordState;\n readonly steps: IEnrichedWorkflowStateRecordStep[];\n readonly createdOn: Date;\n readonly savedOn: Date;\n readonly createdBy: IWorkflowStateIdentity;\n readonly savedBy: IWorkflowStateIdentity;\n readonly done: boolean;\n readonly currentStep: IEnrichedWorkflowStateRecordStep;\n readonly nextStep: IEnrichedWorkflowStateRecordStep | null;\n readonly previousStep: IEnrichedWorkflowStateRecordStep | null;\n}\n\n// Abstractions\nexport const WorkflowStateModel = createAbstraction<CmsModel>(\"WorkflowStateModel\");\n\nexport namespace WorkflowStateModel {\n export type Interface = CmsModel;\n}\n\nexport type IWorkflowStateTransformerFromCmsEntryInput = CmsEntry<\n Omit<IWorkflowStateRecord, \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\">\n>;\n\nexport type IWorkflowStateTransformerFromCmsEntryOutput = IWorkflowStateRecord;\n\nexport type IWorkflowStateTransformerToCmsEntryInput = Omit<\n IWorkflowStateRecord,\n \"savedOn\" | \"createdOn\" | \"savedBy\"\n>;\n\nexport type IWorkflowStateTransformerToCmsEntryOutput = Omit<\n IWorkflowStateRecord,\n \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\"\n>;\n\nexport interface IWorkflowStateMapper {\n fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput;\n toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput;\n}\n\nexport const WorkflowStateMapper = createAbstraction<IWorkflowStateMapper>(\"WorkflowStateMapper\");\n\nexport namespace WorkflowStateMapper {\n export type Interface = IWorkflowStateMapper;\n}\n"],"names":["WorkflowStateRecordState","WorkflowStateModel","createAbstraction","WorkflowStateMapper"],"mappings":";AAIO,IAAKA,wCAAwBA,WAAAA,GAAAA,SAAxBA,wBAAwB;;;;;WAAxBA;;AAkEL,MAAMC,qBAAqBC,kBAA4B;AA+BvD,MAAMC,sBAAsBD,kBAAwC"}
1
+ {"version":3,"file":"domain/workflowState/abstractions.js","sources":["../../../src/domain/workflowState/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IWorkflowStep } from \"../workflow/abstractions.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport enum WorkflowStateRecordState {\n pending = \"pending\",\n inReview = \"inReview\",\n approved = \"approved\",\n rejected = \"rejected\"\n}\n\nexport interface IWorkflowStateIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\nexport interface IWorkflowStateRecordStep extends IWorkflowStep {\n state: WorkflowStateRecordState;\n comment: string | null;\n savedBy: IWorkflowStateIdentity | null;\n}\n\nexport interface IWorkflowStateRecord<\n Steps extends IWorkflowStateRecordStep = IWorkflowStateRecordStep\n> {\n id: string;\n app: string;\n title: string;\n workflowId: string;\n targetId: string;\n targetRevisionId: string;\n isActive: boolean;\n comment: string | undefined;\n state: WorkflowStateRecordState;\n steps: Steps[];\n createdOn: Date;\n savedOn: Date;\n createdBy: IWorkflowStateIdentity;\n savedBy: IWorkflowStateIdentity;\n targetContext: GenericRecord;\n}\n\nexport interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {\n isOwner: boolean;\n canTakeOver: boolean;\n canReview: boolean;\n}\n\nexport interface IWorkflowState {\n readonly id: string;\n readonly app: string;\n readonly title: string;\n readonly workflowId: string;\n readonly targetId: string;\n readonly targetRevisionId: string;\n readonly isActive: boolean;\n readonly comment: string | undefined;\n readonly state: WorkflowStateRecordState;\n readonly steps: IEnrichedWorkflowStateRecordStep[];\n readonly createdOn: Date;\n readonly savedOn: Date;\n readonly createdBy: IWorkflowStateIdentity;\n readonly savedBy: IWorkflowStateIdentity;\n readonly targetContext: GenericRecord;\n readonly done: boolean;\n readonly currentStep: IEnrichedWorkflowStateRecordStep;\n readonly nextStep: IEnrichedWorkflowStateRecordStep | null;\n readonly previousStep: IEnrichedWorkflowStateRecordStep | null;\n}\n\n// Abstractions\nexport const WorkflowStateModel = createAbstraction<CmsModel>(\"WorkflowStateModel\");\n\nexport namespace WorkflowStateModel {\n export type Interface = CmsModel;\n}\n\nexport type IWorkflowStateTransformerFromCmsEntryInput = CmsEntry<\n Omit<IWorkflowStateRecord, \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\">\n>;\n\nexport type IWorkflowStateTransformerFromCmsEntryOutput = IWorkflowStateRecord;\n\nexport type IWorkflowStateTransformerToCmsEntryInput = Omit<\n IWorkflowStateRecord,\n \"savedOn\" | \"createdOn\" | \"savedBy\"\n>;\n\nexport type IWorkflowStateTransformerToCmsEntryOutput = Omit<\n IWorkflowStateRecord,\n \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\"\n>;\n\nexport interface IWorkflowStateMapper {\n fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput;\n toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput;\n}\n\nexport const WorkflowStateMapper = createAbstraction<IWorkflowStateMapper>(\"WorkflowStateMapper\");\n\nexport namespace WorkflowStateMapper {\n export type Interface = IWorkflowStateMapper;\n}\n"],"names":["WorkflowStateRecordState","WorkflowStateModel","createAbstraction","WorkflowStateMapper"],"mappings":";AAKO,IAAKA,wCAAwBA,WAAAA,GAAAA,SAAxBA,wBAAwB;;;;;WAAxBA;;AAoEL,MAAMC,qBAAqBC,kBAA4B;AA+BvD,MAAMC,sBAAsBD,kBAAwC"}
@@ -34,6 +34,7 @@ class WorkflowStateModelImpl {
34
34
  isActive: fields.boolean().label("Is Active"),
35
35
  comment: fields.text().label("Comment"),
36
36
  state: fields.text().label("State").predefinedValues(states),
37
+ targetContext: fields.json().label("Target Context"),
37
38
  steps: fields.object().label("Steps").list().required("Steps are required.").listMinLength(1, "At least one step is required.").fields((stepFields)=>({
38
39
  id: stepFields.text().label("ID").required("ID is required."),
39
40
  title: stepFields.text().label("Title").required("Title is required."),
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/stateModel.js","sources":["../../../src/domain/workflowState/stateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\n\nexport const WORKFLOW_STATE_MODEL_ID = \"wbyWorkflowState\";\n\nconst states = [\n {\n label: \"Pending\",\n value: WorkflowStateRecordState.pending\n },\n {\n label: \"In Review\",\n value: WorkflowStateRecordState.inReview\n },\n {\n label: \"Approved\",\n value: WorkflowStateRecordState.approved\n },\n {\n label: \"Rejected\",\n value: WorkflowStateRecordState.rejected\n }\n];\n\nclass WorkflowStateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WORKFLOW_STATE_MODEL_ID,\n name: \"RecordWorkflow State\"\n })\n .fields(fields => ({\n workflowId: fields.text().label(\"Workflow ID\"),\n app: fields.text().label(\"App\").required(\"App is required.\"),\n title: fields.text().label(\"Title\").required(\"Title is required.\"),\n targetRevisionId: fields.text().label(\"Target Revision ID\"),\n targetId: fields.text().label(\"Target ID\"),\n isActive: fields.boolean().label(\"Is Active\"),\n comment: fields.text().label(\"Comment\"),\n state: fields.text().label(\"State\").predefinedValues(states),\n steps: fields\n .object()\n .label(\"Steps\")\n .list()\n .required(\"Steps are required.\")\n .listMinLength(1, \"At least one step is required.\")\n .fields(stepFields => ({\n id: stepFields.text().label(\"ID\").required(\"ID is required.\"),\n title: stepFields.text().label(\"Title\").required(\"Title is required.\"),\n color: stepFields.text().label(\"Color\").required(\"Color is required.\"),\n description: stepFields.text().label(\"Description\"),\n teams: stepFields\n .object()\n .label(\"Teams\")\n .list()\n .required(\"At least one team is required.\")\n .listMinLength(1, \"At least one team is required.\")\n .fields(teamFields => ({\n id: teamFields.text().label(\"ID\").required(\"ID is required.\")\n })),\n notifications: stepFields\n .object()\n .label(\"Notifications\")\n .list()\n .fields(notificationFields => ({\n id: notificationFields\n .text()\n .label(\"ID\")\n .required(\"ID is required.\")\n })),\n state: stepFields.text().label(\"State\").predefinedValues(states),\n savedBy: stepFields\n .object()\n .label(\"User\")\n .fields(userFields => ({\n id: userFields.text().label(\"ID\").required(\"ID is required.\"),\n displayName: userFields\n .text()\n .label(\"Display Name\")\n .required(\"Display name is required.\"),\n type: userFields\n .text()\n .label(\"Type\")\n .required(\"Type is required.\")\n })),\n comment: stepFields.text().label(\"Comment\")\n }))\n }))\n ];\n }\n}\n\nexport const WorkflowStateModel = ModelFactory.createImplementation({\n implementation: WorkflowStateModelImpl,\n dependencies: []\n});\n"],"names":["WORKFLOW_STATE_MODEL_ID","states","WorkflowStateRecordState","WorkflowStateModelImpl","builder","fields","stepFields","teamFields","notificationFields","userFields","WorkflowStateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,0BAA0B;AAEvC,MAAMC,SAAS;IACX;QACI,OAAO;QACP,OAAOC,yBAAyB,OAAO;IAC3C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;CACH;AAED,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASJ;gBACT,MAAM;YACV,GACC,MAAM,CAACK,CAAAA,SAAW;oBACf,YAAYA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAChC,KAAKA,OAAO,IAAI,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC;oBACzC,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;oBAC7C,kBAAkBA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACtC,UAAUA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,UAAUA,OAAO,OAAO,GAAG,KAAK,CAAC;oBACjC,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC7B,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACJ;oBACrD,OAAOI,OACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,uBACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;4BACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;4BAC3C,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,aAAaA,WAAW,IAAI,GAAG,KAAK,CAAC;4BACrC,OAAOA,WACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,kCACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;gCAC/C;4BACJ,eAAeD,WACV,MAAM,GACN,KAAK,CAAC,iBACN,IAAI,GACJ,MAAM,CAACE,CAAAA,qBAAuB;oCAC3B,IAAIA,mBACC,IAAI,GACJ,KAAK,CAAC,MACN,QAAQ,CAAC;gCAClB;4BACJ,OAAOF,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACL;4BACzD,SAASK,WACJ,MAAM,GACN,KAAK,CAAC,QACN,MAAM,CAACG,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;oCAC3C,aAAaA,WACR,IAAI,GACJ,KAAK,CAAC,gBACN,QAAQ,CAAC;oCACd,MAAMA,WACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC;gCAClB;4BACJ,SAASH,WAAW,IAAI,GAAG,KAAK,CAAC;wBACrC;gBACR;SACP;IACL;AACJ;AAEO,MAAMI,qBAAqBC,aAAa,oBAAoB,CAAC;IAChE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"domain/workflowState/stateModel.js","sources":["../../../src/domain/workflowState/stateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\n\nexport const WORKFLOW_STATE_MODEL_ID = \"wbyWorkflowState\";\n\nconst states = [\n {\n label: \"Pending\",\n value: WorkflowStateRecordState.pending\n },\n {\n label: \"In Review\",\n value: WorkflowStateRecordState.inReview\n },\n {\n label: \"Approved\",\n value: WorkflowStateRecordState.approved\n },\n {\n label: \"Rejected\",\n value: WorkflowStateRecordState.rejected\n }\n];\n\nclass WorkflowStateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WORKFLOW_STATE_MODEL_ID,\n name: \"RecordWorkflow State\"\n })\n .fields(fields => ({\n workflowId: fields.text().label(\"Workflow ID\"),\n app: fields.text().label(\"App\").required(\"App is required.\"),\n title: fields.text().label(\"Title\").required(\"Title is required.\"),\n targetRevisionId: fields.text().label(\"Target Revision ID\"),\n targetId: fields.text().label(\"Target ID\"),\n isActive: fields.boolean().label(\"Is Active\"),\n comment: fields.text().label(\"Comment\"),\n state: fields.text().label(\"State\").predefinedValues(states),\n targetContext: fields.json().label(\"Target Context\"),\n steps: fields\n .object()\n .label(\"Steps\")\n .list()\n .required(\"Steps are required.\")\n .listMinLength(1, \"At least one step is required.\")\n .fields(stepFields => ({\n id: stepFields.text().label(\"ID\").required(\"ID is required.\"),\n title: stepFields.text().label(\"Title\").required(\"Title is required.\"),\n color: stepFields.text().label(\"Color\").required(\"Color is required.\"),\n description: stepFields.text().label(\"Description\"),\n teams: stepFields\n .object()\n .label(\"Teams\")\n .list()\n .required(\"At least one team is required.\")\n .listMinLength(1, \"At least one team is required.\")\n .fields(teamFields => ({\n id: teamFields.text().label(\"ID\").required(\"ID is required.\")\n })),\n notifications: stepFields\n .object()\n .label(\"Notifications\")\n .list()\n .fields(notificationFields => ({\n id: notificationFields\n .text()\n .label(\"ID\")\n .required(\"ID is required.\")\n })),\n state: stepFields.text().label(\"State\").predefinedValues(states),\n savedBy: stepFields\n .object()\n .label(\"User\")\n .fields(userFields => ({\n id: userFields.text().label(\"ID\").required(\"ID is required.\"),\n displayName: userFields\n .text()\n .label(\"Display Name\")\n .required(\"Display name is required.\"),\n type: userFields\n .text()\n .label(\"Type\")\n .required(\"Type is required.\")\n })),\n comment: stepFields.text().label(\"Comment\")\n }))\n }))\n ];\n }\n}\n\nexport const WorkflowStateModel = ModelFactory.createImplementation({\n implementation: WorkflowStateModelImpl,\n dependencies: []\n});\n"],"names":["WORKFLOW_STATE_MODEL_ID","states","WorkflowStateRecordState","WorkflowStateModelImpl","builder","fields","stepFields","teamFields","notificationFields","userFields","WorkflowStateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,0BAA0B;AAEvC,MAAMC,SAAS;IACX;QACI,OAAO;QACP,OAAOC,yBAAyB,OAAO;IAC3C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;CACH;AAED,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASJ;gBACT,MAAM;YACV,GACC,MAAM,CAACK,CAAAA,SAAW;oBACf,YAAYA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAChC,KAAKA,OAAO,IAAI,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC;oBACzC,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;oBAC7C,kBAAkBA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACtC,UAAUA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,UAAUA,OAAO,OAAO,GAAG,KAAK,CAAC;oBACjC,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC7B,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACJ;oBACrD,eAAeI,OAAO,IAAI,GAAG,KAAK,CAAC;oBACnC,OAAOA,OACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,uBACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;4BACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;4BAC3C,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,aAAaA,WAAW,IAAI,GAAG,KAAK,CAAC;4BACrC,OAAOA,WACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,kCACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;gCAC/C;4BACJ,eAAeD,WACV,MAAM,GACN,KAAK,CAAC,iBACN,IAAI,GACJ,MAAM,CAACE,CAAAA,qBAAuB;oCAC3B,IAAIA,mBACC,IAAI,GACJ,KAAK,CAAC,MACN,QAAQ,CAAC;gCAClB;4BACJ,OAAOF,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACL;4BACzD,SAASK,WACJ,MAAM,GACN,KAAK,CAAC,QACN,MAAM,CAACG,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;oCAC3C,aAAaA,WACR,IAAI,GACJ,KAAK,CAAC,gBACN,QAAQ,CAAC;oCACd,MAAMA,WACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC;gCAClB;4BACJ,SAASH,WAAW,IAAI,GAAG,KAAK,CAAC;wBACrC;gBACR;SACP;IACL;AACJ;AAEO,MAAMI,qBAAqBC,aAAa,oBAAoB,CAAC;IAChE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -4,6 +4,7 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
4
4
  import { ListWorkflowsUseCase } from "../../../features/workflow/ListWorkflows/index.js";
5
5
  import { GetTargetWorkflowStateUseCase } from "../GetTargetWorkflowState/index.js";
6
6
  import { CreateWorkflowStateRepository, CreateWorkflowStateUseCase as UseCase } from "./abstractions.js";
7
+ import { WorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
7
8
  declare class CreateWorkflowStateUseCaseImpl implements UseCase.Interface {
8
9
  private identityContext;
9
10
  private getUserTeams;
@@ -11,7 +12,8 @@ declare class CreateWorkflowStateUseCaseImpl implements UseCase.Interface {
11
12
  private listWorkflows;
12
13
  private getTargetState;
13
14
  private repository;
14
- constructor(identityContext: IdentityContext.Interface, getUserTeams: GetUserTeamsUseCase.Interface, eventPublisher: EventPublisher.Interface, listWorkflows: ListWorkflowsUseCase.Interface, getTargetState: GetTargetWorkflowStateUseCase.Interface, repository: CreateWorkflowStateRepository.Interface);
15
+ private targetContextProvider;
16
+ constructor(identityContext: IdentityContext.Interface, getUserTeams: GetUserTeamsUseCase.Interface, eventPublisher: EventPublisher.Interface, listWorkflows: ListWorkflowsUseCase.Interface, getTargetState: GetTargetWorkflowStateUseCase.Interface, repository: CreateWorkflowStateRepository.Interface, targetContextProvider: WorkflowStateContextProvider.Interface);
15
17
  execute(input: UseCase.Input): UseCase.Return;
16
18
  }
17
19
  export declare const CreateWorkflowStateUseCase: typeof CreateWorkflowStateUseCaseImpl & {
@@ -7,18 +7,20 @@ import { ListWorkflowsUseCase } from "../../workflow/ListWorkflows/index.js";
7
7
  import { GetTargetWorkflowStateUseCase } from "../GetTargetWorkflowState/index.js";
8
8
  import { CreateWorkflowStateRepository, CreateWorkflowStateUseCase } from "./abstractions.js";
9
9
  import { WorkflowStateAfterCreateEvent } from "./events.js";
10
+ import { WorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
10
11
  import { WorkflowState } from "../../../domain/workflowState/WorkflowState.js";
11
12
  import { WorkflowStateRecordState } from "../../../domain/workflowState/abstractions.js";
12
13
  import { ActiveStateExistsError, MultipleWorkflowsFoundError, WorkflowStatePersistenceError, WorkflowStateValidationError } from "../../../domain/workflowState/errors.js";
13
14
  import { WorkflowNotFoundError } from "../../../domain/workflow/errors.js";
14
15
  class CreateWorkflowStateUseCaseImpl {
15
- constructor(identityContext, getUserTeams, eventPublisher, listWorkflows, getTargetState, repository){
16
+ constructor(identityContext, getUserTeams, eventPublisher, listWorkflows, getTargetState, repository, targetContextProvider){
16
17
  this.identityContext = identityContext;
17
18
  this.getUserTeams = getUserTeams;
18
19
  this.eventPublisher = eventPublisher;
19
20
  this.listWorkflows = listWorkflows;
20
21
  this.getTargetState = getTargetState;
21
22
  this.repository = repository;
23
+ this.targetContextProvider = targetContextProvider;
22
24
  }
23
25
  async execute(input) {
24
26
  const { id: targetId, version } = parseIdentifier(input.targetRevisionId);
@@ -52,6 +54,10 @@ class CreateWorkflowStateUseCaseImpl {
52
54
  }));
53
55
  if (0 === workflow.steps.length) return Result.fail(new WorkflowStateValidationError("Cannot create a workflow state for a workflow that has no steps defined."));
54
56
  const identity = this.identityContext.getIdentity();
57
+ const targetContext = await this.targetContextProvider.provide({
58
+ app: input.app,
59
+ targetRevisionId: input.targetRevisionId
60
+ });
55
61
  const record = {
56
62
  workflowId: workflow.id,
57
63
  comment: void 0,
@@ -61,6 +67,7 @@ class CreateWorkflowStateUseCaseImpl {
61
67
  targetId,
62
68
  isActive: true,
63
69
  targetRevisionId: input.targetRevisionId,
70
+ targetContext,
64
71
  steps: workflow.steps.map((step)=>({
65
72
  ...step,
66
73
  state: WorkflowStateRecordState.pending,
@@ -88,7 +95,8 @@ const CreateWorkflowStateUseCase_CreateWorkflowStateUseCase = CreateWorkflowStat
88
95
  EventPublisher,
89
96
  ListWorkflowsUseCase,
90
97
  GetTargetWorkflowStateUseCase,
91
- CreateWorkflowStateRepository
98
+ CreateWorkflowStateRepository,
99
+ WorkflowStateContextProvider
92
100
  ]
93
101
  });
94
102
  export { CreateWorkflowStateUseCase_CreateWorkflowStateUseCase as CreateWorkflowStateUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { GetUserTeamsUseCase } from \"~/features/internal/GetUserTeams/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { ListWorkflowsUseCase } from \"~/features/workflow/ListWorkflows/index.js\";\nimport { GetTargetWorkflowStateUseCase } from \"../GetTargetWorkflowState/index.js\";\nimport {\n CreateWorkflowStateRepository,\n CreateWorkflowStateUseCase as UseCase\n} from \"./abstractions.js\";\nimport { WorkflowStateAfterCreateEvent } from \"./events.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\nimport {\n WorkflowStateValidationError,\n ActiveStateExistsError,\n MultipleWorkflowsFoundError,\n WorkflowStatePersistenceError\n} from \"~/domain/workflowState/errors.js\";\nimport { WorkflowNotFoundError } from \"~/domain/workflow/errors.js\";\n\nclass CreateWorkflowStateUseCaseImpl implements UseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserTeams: GetUserTeamsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private listWorkflows: ListWorkflowsUseCase.Interface,\n private getTargetState: GetTargetWorkflowStateUseCase.Interface,\n private repository: CreateWorkflowStateRepository.Interface\n ) {}\n\n async execute(input: UseCase.Input): UseCase.Return {\n const { id: targetId, version } = parseIdentifier(input.targetRevisionId);\n if (!version) {\n return Result.fail(\n new WorkflowStateValidationError(\n \"Cannot create a workflow state without version of a target record.\"\n )\n );\n }\n\n const workflowsResult = await this.listWorkflows.execute({\n where: {\n app: input.app\n },\n limit: 1\n });\n\n if (workflowsResult.isFail()) {\n return Result.fail(new WorkflowStatePersistenceError(workflowsResult.error));\n }\n\n const { items: workflows, meta } = workflowsResult.value;\n const workflow = workflows[0];\n\n if (!workflow) {\n return Result.fail(\n new WorkflowNotFoundError({\n id: \"\",\n app: input.app\n })\n );\n }\n\n if (meta.totalCount > 1) {\n return Result.fail(\n new MultipleWorkflowsFoundError({\n app: input.app,\n targetRevisionId: input.targetRevisionId,\n workflows,\n meta\n })\n );\n }\n\n const existingStateResult = await this.getTargetState.execute({\n app: input.app,\n targetRevisionId: input.targetRevisionId\n });\n\n if (existingStateResult.isOk()) {\n return Result.fail(\n new ActiveStateExistsError({\n app: input.app,\n targetRevisionId: input.targetRevisionId\n })\n );\n }\n\n if (workflow.steps.length === 0) {\n return Result.fail(\n new WorkflowStateValidationError(\n \"Cannot create a workflow state for a workflow that has no steps defined.\"\n )\n );\n }\n\n const identity = this.identityContext.getIdentity();\n\n const record: CreateWorkflowStateRepository.Input = {\n workflowId: workflow.id,\n comment: undefined,\n state: WorkflowStateRecordState.pending,\n app: input.app,\n title: input.title,\n targetId,\n isActive: true,\n targetRevisionId: input.targetRevisionId,\n steps: workflow.steps.map(step => ({\n ...step,\n state: WorkflowStateRecordState.pending,\n savedBy: null,\n comment: null\n }))\n };\n\n const createResult = await this.repository.execute(record);\n if (createResult.isFail()) {\n return Result.fail(createResult.error);\n }\n\n const createdRecord = createResult.value;\n\n const teamsResult = await this.getUserTeams.execute(identity.id);\n const teams = teamsResult.value;\n const workflowState = new WorkflowState(createdRecord, teams, identity);\n\n await this.eventPublisher.publish(\n new WorkflowStateAfterCreateEvent({\n state: workflowState\n })\n );\n\n return Result.ok(workflowState);\n }\n}\n\nexport const CreateWorkflowStateUseCase = UseCase.createImplementation({\n implementation: CreateWorkflowStateUseCaseImpl,\n dependencies: [\n IdentityContext,\n GetUserTeamsUseCase,\n EventPublisher,\n ListWorkflowsUseCase,\n GetTargetWorkflowStateUseCase,\n CreateWorkflowStateRepository\n ]\n});\n"],"names":["CreateWorkflowStateUseCaseImpl","identityContext","getUserTeams","eventPublisher","listWorkflows","getTargetState","repository","input","targetId","version","parseIdentifier","Result","WorkflowStateValidationError","workflowsResult","WorkflowStatePersistenceError","workflows","meta","workflow","WorkflowNotFoundError","MultipleWorkflowsFoundError","existingStateResult","ActiveStateExistsError","identity","record","undefined","WorkflowStateRecordState","step","createResult","createdRecord","teamsResult","teams","workflowState","WorkflowState","WorkflowStateAfterCreateEvent","CreateWorkflowStateUseCase","UseCase","IdentityContext","GetUserTeamsUseCase","EventPublisher","ListWorkflowsUseCase","GetTargetWorkflowStateUseCase","CreateWorkflowStateRepository"],"mappings":"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"}
1
+ {"version":3,"file":"features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { GetUserTeamsUseCase } from \"~/features/internal/GetUserTeams/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { ListWorkflowsUseCase } from \"~/features/workflow/ListWorkflows/index.js\";\nimport { GetTargetWorkflowStateUseCase } from \"../GetTargetWorkflowState/index.js\";\nimport {\n CreateWorkflowStateRepository,\n CreateWorkflowStateUseCase as UseCase\n} from \"./abstractions.js\";\nimport { WorkflowStateAfterCreateEvent } from \"./events.js\";\nimport { WorkflowStateContextProvider } from \"./WorkflowStateContextProvider.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\nimport {\n WorkflowStateValidationError,\n ActiveStateExistsError,\n MultipleWorkflowsFoundError,\n WorkflowStatePersistenceError\n} from \"~/domain/workflowState/errors.js\";\nimport { WorkflowNotFoundError } from \"~/domain/workflow/errors.js\";\n\nclass CreateWorkflowStateUseCaseImpl implements UseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserTeams: GetUserTeamsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private listWorkflows: ListWorkflowsUseCase.Interface,\n private getTargetState: GetTargetWorkflowStateUseCase.Interface,\n private repository: CreateWorkflowStateRepository.Interface,\n private targetContextProvider: WorkflowStateContextProvider.Interface\n ) {}\n\n async execute(input: UseCase.Input): UseCase.Return {\n const { id: targetId, version } = parseIdentifier(input.targetRevisionId);\n if (!version) {\n return Result.fail(\n new WorkflowStateValidationError(\n \"Cannot create a workflow state without version of a target record.\"\n )\n );\n }\n\n const workflowsResult = await this.listWorkflows.execute({\n where: {\n app: input.app\n },\n limit: 1\n });\n\n if (workflowsResult.isFail()) {\n return Result.fail(new WorkflowStatePersistenceError(workflowsResult.error));\n }\n\n const { items: workflows, meta } = workflowsResult.value;\n const workflow = workflows[0];\n\n if (!workflow) {\n return Result.fail(\n new WorkflowNotFoundError({\n id: \"\",\n app: input.app\n })\n );\n }\n\n if (meta.totalCount > 1) {\n return Result.fail(\n new MultipleWorkflowsFoundError({\n app: input.app,\n targetRevisionId: input.targetRevisionId,\n workflows,\n meta\n })\n );\n }\n\n const existingStateResult = await this.getTargetState.execute({\n app: input.app,\n targetRevisionId: input.targetRevisionId\n });\n\n if (existingStateResult.isOk()) {\n return Result.fail(\n new ActiveStateExistsError({\n app: input.app,\n targetRevisionId: input.targetRevisionId\n })\n );\n }\n\n if (workflow.steps.length === 0) {\n return Result.fail(\n new WorkflowStateValidationError(\n \"Cannot create a workflow state for a workflow that has no steps defined.\"\n )\n );\n }\n\n const identity = this.identityContext.getIdentity();\n\n const targetContext = await this.targetContextProvider.provide({\n app: input.app,\n targetRevisionId: input.targetRevisionId\n });\n\n const record: CreateWorkflowStateRepository.Input = {\n workflowId: workflow.id,\n comment: undefined,\n state: WorkflowStateRecordState.pending,\n app: input.app,\n title: input.title,\n targetId,\n isActive: true,\n targetRevisionId: input.targetRevisionId,\n targetContext,\n steps: workflow.steps.map(step => ({\n ...step,\n state: WorkflowStateRecordState.pending,\n savedBy: null,\n comment: null\n }))\n };\n\n const createResult = await this.repository.execute(record);\n if (createResult.isFail()) {\n return Result.fail(createResult.error);\n }\n\n const createdRecord = createResult.value;\n\n const teamsResult = await this.getUserTeams.execute(identity.id);\n const teams = teamsResult.value;\n const workflowState = new WorkflowState(createdRecord, teams, identity);\n\n await this.eventPublisher.publish(\n new WorkflowStateAfterCreateEvent({\n state: workflowState\n })\n );\n\n return Result.ok(workflowState);\n }\n}\n\nexport const CreateWorkflowStateUseCase = UseCase.createImplementation({\n implementation: CreateWorkflowStateUseCaseImpl,\n dependencies: [\n IdentityContext,\n GetUserTeamsUseCase,\n EventPublisher,\n ListWorkflowsUseCase,\n GetTargetWorkflowStateUseCase,\n CreateWorkflowStateRepository,\n WorkflowStateContextProvider\n ]\n});\n"],"names":["CreateWorkflowStateUseCaseImpl","identityContext","getUserTeams","eventPublisher","listWorkflows","getTargetState","repository","targetContextProvider","input","targetId","version","parseIdentifier","Result","WorkflowStateValidationError","workflowsResult","WorkflowStatePersistenceError","workflows","meta","workflow","WorkflowNotFoundError","MultipleWorkflowsFoundError","existingStateResult","ActiveStateExistsError","identity","targetContext","record","undefined","WorkflowStateRecordState","step","createResult","createdRecord","teamsResult","teams","workflowState","WorkflowState","WorkflowStateAfterCreateEvent","CreateWorkflowStateUseCase","UseCase","IdentityContext","GetUserTeamsUseCase","EventPublisher","ListWorkflowsUseCase","GetTargetWorkflowStateUseCase","CreateWorkflowStateRepository","WorkflowStateContextProvider"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type IWorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
2
+ import type { GenericRecord } from "@webiny/api/types.js";
3
+ declare class DefaultWorkflowStateContextProviderImpl implements IWorkflowStateContextProvider {
4
+ provide(): Promise<GenericRecord>;
5
+ }
6
+ export declare const DefaultContextProvider: typeof DefaultWorkflowStateContextProviderImpl & {
7
+ __abstraction: import("@webiny/di").Abstraction<IWorkflowStateContextProvider>;
8
+ };
9
+ export {};
@@ -0,0 +1,13 @@
1
+ import { WorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
2
+ class DefaultWorkflowStateContextProviderImpl {
3
+ async provide() {
4
+ return {};
5
+ }
6
+ }
7
+ const DefaultContextProvider = WorkflowStateContextProvider.createImplementation({
8
+ implementation: DefaultWorkflowStateContextProviderImpl,
9
+ dependencies: []
10
+ });
11
+ export { DefaultContextProvider };
12
+
13
+ //# sourceMappingURL=DefaultWorkflowStateContextProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.ts"],"sourcesContent":["import {\n WorkflowStateContextProvider,\n type IWorkflowStateContextProvider\n} from \"./WorkflowStateContextProvider.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nclass DefaultWorkflowStateContextProviderImpl implements IWorkflowStateContextProvider {\n async provide(): Promise<GenericRecord> {\n return {};\n }\n}\n\nexport const DefaultContextProvider = WorkflowStateContextProvider.createImplementation({\n implementation: DefaultWorkflowStateContextProviderImpl,\n dependencies: []\n});\n"],"names":["DefaultWorkflowStateContextProviderImpl","DefaultContextProvider","WorkflowStateContextProvider"],"mappings":";AAMA,MAAMA;IACF,MAAM,UAAkC;QACpC,OAAO,CAAC;IACZ;AACJ;AAEO,MAAMC,yBAAyBC,6BAA6B,oBAAoB,CAAC;IACpF,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,13 @@
1
+ import type { GenericRecord } from "@webiny/api/types.js";
2
+ export interface IWorkflowStateContextProviderParams {
3
+ app: string;
4
+ targetRevisionId: string;
5
+ }
6
+ export interface IWorkflowStateContextProvider {
7
+ provide(params: IWorkflowStateContextProviderParams): Promise<GenericRecord>;
8
+ }
9
+ export declare const WorkflowStateContextProvider: import("@webiny/di").Abstraction<IWorkflowStateContextProvider>;
10
+ export declare namespace WorkflowStateContextProvider {
11
+ type Interface = IWorkflowStateContextProvider;
12
+ type Params = IWorkflowStateContextProviderParams;
13
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const WorkflowStateContextProvider = createAbstraction("WorkflowStateContextProvider");
3
+ export { WorkflowStateContextProvider };
4
+
5
+ //# sourceMappingURL=WorkflowStateContextProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport interface IWorkflowStateContextProviderParams {\n app: string;\n targetRevisionId: string;\n}\n\nexport interface IWorkflowStateContextProvider {\n provide(params: IWorkflowStateContextProviderParams): Promise<GenericRecord>;\n}\n\nexport const WorkflowStateContextProvider = createAbstraction<IWorkflowStateContextProvider>(\n \"WorkflowStateContextProvider\"\n);\n\nexport namespace WorkflowStateContextProvider {\n export type Interface = IWorkflowStateContextProvider;\n export type Params = IWorkflowStateContextProviderParams;\n}\n"],"names":["WorkflowStateContextProvider","createAbstraction"],"mappings":";AAYO,MAAMA,+BAA+BC,kBACxC"}
@@ -1,10 +1,12 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { CreateWorkflowStateUseCase } from "./CreateWorkflowStateUseCase.js";
3
3
  import { CreateWorkflowStateRepository } from "./CreateWorkflowStateRepository.js";
4
+ import { DefaultContextProvider } from "./DefaultWorkflowStateContextProvider.js";
4
5
  const CreateWorkflowStateFeature = createFeature({
5
6
  name: "WorkflowState/CreateWorkflowState",
6
7
  register (container) {
7
8
  container.register(CreateWorkflowStateRepository).inSingletonScope();
9
+ container.register(DefaultContextProvider);
8
10
  container.register(CreateWorkflowStateUseCase);
9
11
  }
10
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/workflowState/CreateWorkflowState/feature.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateWorkflowStateUseCase } from \"./CreateWorkflowStateUseCase.js\";\nimport { CreateWorkflowStateRepository } from \"./CreateWorkflowStateRepository.js\";\n\nexport const CreateWorkflowStateFeature = createFeature({\n name: \"WorkflowState/CreateWorkflowState\",\n register(container) {\n container.register(CreateWorkflowStateRepository).inSingletonScope();\n container.register(CreateWorkflowStateUseCase);\n }\n});\n"],"names":["CreateWorkflowStateFeature","createFeature","container","CreateWorkflowStateRepository","CreateWorkflowStateUseCase"],"mappings":";;;AAIO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,+BAA+B,gBAAgB;QAClED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
1
+ {"version":3,"file":"features/workflowState/CreateWorkflowState/feature.js","sources":["../../../../src/features/workflowState/CreateWorkflowState/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateWorkflowStateUseCase } from \"./CreateWorkflowStateUseCase.js\";\nimport { CreateWorkflowStateRepository } from \"./CreateWorkflowStateRepository.js\";\nimport { DefaultContextProvider } from \"./DefaultWorkflowStateContextProvider.js\";\n\nexport const CreateWorkflowStateFeature = createFeature({\n name: \"WorkflowState/CreateWorkflowState\",\n register(container) {\n container.register(CreateWorkflowStateRepository).inSingletonScope();\n container.register(DefaultContextProvider);\n container.register(CreateWorkflowStateUseCase);\n }\n});\n"],"names":["CreateWorkflowStateFeature","createFeature","container","CreateWorkflowStateRepository","DefaultContextProvider","CreateWorkflowStateUseCase"],"mappings":";;;;AAKO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,+BAA+B,gBAAgB;QAClED,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;IACvB;AACJ"}
@@ -1,2 +1,3 @@
1
1
  export { CreateWorkflowStateUseCase, CreateWorkflowStateRepository } from "./abstractions.js";
2
2
  export { WorkflowStateAfterCreateHandler } from "./events.js";
3
+ export { WorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
@@ -1,2 +1,3 @@
1
1
  export { CreateWorkflowStateRepository, CreateWorkflowStateUseCase } from "./abstractions.js";
2
2
  export { WorkflowStateAfterCreateHandler } from "./events.js";
3
+ export { WorkflowStateContextProvider } from "./WorkflowStateContextProvider.js";
@@ -0,0 +1,9 @@
1
+ import { WorkflowStateFilter } from "./WorkflowStateFilter.js";
2
+ import type { WorkflowState } from "../../../domain/workflowState/WorkflowState.js";
3
+ declare class PassThroughWorkflowStateFilter implements WorkflowStateFilter.Interface {
4
+ filter(items: WorkflowState[]): Promise<WorkflowState[]>;
5
+ }
6
+ export declare const DefaultWorkflowStateFilter: typeof PassThroughWorkflowStateFilter & {
7
+ __abstraction: import("@webiny/di").Abstraction<import("./WorkflowStateFilter.js").IWorkflowStateFilter>;
8
+ };
9
+ export {};
@@ -0,0 +1,13 @@
1
+ import { WorkflowStateFilter } from "./WorkflowStateFilter.js";
2
+ class PassThroughWorkflowStateFilter {
3
+ async filter(items) {
4
+ return items;
5
+ }
6
+ }
7
+ const DefaultWorkflowStateFilter = WorkflowStateFilter.createImplementation({
8
+ implementation: PassThroughWorkflowStateFilter,
9
+ dependencies: []
10
+ });
11
+ export { DefaultWorkflowStateFilter };
12
+
13
+ //# sourceMappingURL=DefaultWorkflowStateFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.ts"],"sourcesContent":["import { WorkflowStateFilter } from \"./WorkflowStateFilter.js\";\nimport type { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\n\nclass PassThroughWorkflowStateFilter implements WorkflowStateFilter.Interface {\n async filter(items: WorkflowState[]): Promise<WorkflowState[]> {\n return items;\n }\n}\n\nexport const DefaultWorkflowStateFilter = WorkflowStateFilter.createImplementation({\n implementation: PassThroughWorkflowStateFilter,\n dependencies: []\n});\n"],"names":["PassThroughWorkflowStateFilter","items","DefaultWorkflowStateFilter","WorkflowStateFilter"],"mappings":";AAGA,MAAMA;IACF,MAAM,OAAOC,KAAsB,EAA4B;QAC3D,OAAOA;IACX;AACJ;AAEO,MAAMC,6BAA6BC,oBAAoB,oBAAoB,CAAC;IAC/E,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
@@ -1,11 +1,13 @@
1
1
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
2
  import { GetUserTeamsUseCase } from "../../../features/internal/GetUserTeams/index.js";
3
3
  import { ListWorkflowStatesRepository, ListWorkflowStatesUseCase as UseCase } from "./abstractions.js";
4
+ import { WorkflowStateFilter } from "./WorkflowStateFilter.js";
4
5
  declare class ListWorkflowStatesUseCaseImpl implements UseCase.Interface {
5
6
  private identityContext;
6
7
  private getUserTeams;
7
8
  private repository;
8
- constructor(identityContext: IdentityContext.Interface, getUserTeams: GetUserTeamsUseCase.Interface, repository: ListWorkflowStatesRepository.Interface);
9
+ private stateFilter;
10
+ constructor(identityContext: IdentityContext.Interface, getUserTeams: GetUserTeamsUseCase.Interface, repository: ListWorkflowStatesRepository.Interface, stateFilter: WorkflowStateFilter.Interface);
9
11
  execute(params?: UseCase.Params): UseCase.Return;
10
12
  }
11
13
  export declare const ListWorkflowStatesUseCase: typeof ListWorkflowStatesUseCaseImpl & {
@@ -3,23 +3,53 @@ import { IdentityContext } from "@webiny/api-core/features/security/IdentityCont
3
3
  import { GetUserTeamsUseCase } from "../../internal/GetUserTeams/index.js";
4
4
  import { ListWorkflowStatesRepository, ListWorkflowStatesUseCase } from "./abstractions.js";
5
5
  import { WorkflowState } from "../../../domain/workflowState/WorkflowState.js";
6
+ import { WorkflowStateFilter } from "./WorkflowStateFilter.js";
6
7
  class ListWorkflowStatesUseCaseImpl {
7
- constructor(identityContext, getUserTeams, repository){
8
+ constructor(identityContext, getUserTeams, repository, stateFilter){
8
9
  this.identityContext = identityContext;
9
10
  this.getUserTeams = getUserTeams;
10
11
  this.repository = repository;
12
+ this.stateFilter = stateFilter;
11
13
  }
12
14
  async execute(params = {}) {
13
15
  const identity = this.identityContext.getIdentity();
14
16
  const teamsResult = await this.getUserTeams.execute(identity.id);
15
17
  const teams = teamsResult.value;
16
- const recordsResult = await this.repository.execute(params);
17
- if (recordsResult.isFail()) return Result.fail(recordsResult.error);
18
- const { items: records, meta } = recordsResult.value;
19
- const items = records.map((record)=>new WorkflowState(record, teams, identity));
18
+ const requestedLimit = params.limit || 50;
19
+ const accumulated = [];
20
+ let cursor = params.after || null;
21
+ let totalCount = 0;
22
+ let totalRemoved = 0;
23
+ let hasMoreItems = false;
24
+ while(accumulated.length < requestedLimit){
25
+ const recordsResult = await this.repository.execute({
26
+ ...params,
27
+ limit: requestedLimit,
28
+ after: cursor || void 0
29
+ });
30
+ if (recordsResult.isFail()) return Result.fail(recordsResult.error);
31
+ const { items: records, meta } = recordsResult.value;
32
+ totalCount = meta.totalCount;
33
+ const items = records.map((record)=>new WorkflowState(record, teams, identity));
34
+ const filtered = await this.stateFilter.filter(items);
35
+ totalRemoved += items.length - filtered.length;
36
+ accumulated.push(...filtered);
37
+ if (!meta.hasMoreItems) {
38
+ hasMoreItems = accumulated.length > requestedLimit;
39
+ cursor = null;
40
+ break;
41
+ }
42
+ cursor = meta.cursor;
43
+ hasMoreItems = true;
44
+ }
45
+ const items = accumulated.slice(0, requestedLimit);
20
46
  return Result.ok({
21
47
  items,
22
- meta
48
+ meta: {
49
+ totalCount: Math.max(0, totalCount - totalRemoved),
50
+ hasMoreItems,
51
+ cursor
52
+ }
23
53
  });
24
54
  }
25
55
  }
@@ -28,7 +58,8 @@ const ListWorkflowStatesUseCase_ListWorkflowStatesUseCase = ListWorkflowStatesUs
28
58
  dependencies: [
29
59
  IdentityContext,
30
60
  GetUserTeamsUseCase,
31
- ListWorkflowStatesRepository
61
+ ListWorkflowStatesRepository,
62
+ WorkflowStateFilter
32
63
  ]
33
64
  });
34
65
  export { ListWorkflowStatesUseCase_ListWorkflowStatesUseCase as ListWorkflowStatesUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { GetUserTeamsUseCase } from \"~/features/internal/GetUserTeams/index.js\";\nimport {\n ListWorkflowStatesRepository,\n ListWorkflowStatesUseCase as UseCase\n} from \"./abstractions.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\n\nclass ListWorkflowStatesUseCaseImpl implements UseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserTeams: GetUserTeamsUseCase.Interface,\n private repository: ListWorkflowStatesRepository.Interface\n ) {}\n\n async execute(params: UseCase.Params = {}): UseCase.Return {\n const identity = this.identityContext.getIdentity();\n\n const teamsResult = await this.getUserTeams.execute(identity.id);\n const teams = teamsResult.value;\n\n const recordsResult = await this.repository.execute(params);\n\n if (recordsResult.isFail()) {\n return Result.fail(recordsResult.error);\n }\n\n const { items: records, meta } = recordsResult.value;\n\n const items = records.map(record => new WorkflowState(record, teams, identity));\n\n return Result.ok({\n items,\n meta\n });\n }\n}\n\nexport const ListWorkflowStatesUseCase = UseCase.createImplementation({\n implementation: ListWorkflowStatesUseCaseImpl,\n dependencies: [IdentityContext, GetUserTeamsUseCase, ListWorkflowStatesRepository]\n});\n"],"names":["ListWorkflowStatesUseCaseImpl","identityContext","getUserTeams","repository","params","identity","teamsResult","teams","recordsResult","Result","records","meta","items","record","WorkflowState","ListWorkflowStatesUseCase","UseCase","IdentityContext","GetUserTeamsUseCase","ListWorkflowStatesRepository"],"mappings":";;;;;AASA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,YAA2C,EAC3CC,UAAkD,CAC5D;aAHUF,eAAe,GAAfA;aACAC,YAAY,GAAZA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,SAAyB,CAAC,CAAC,EAAkB;QACvD,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,MAAMC,cAAc,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAACD,SAAS,EAAE;QAC/D,MAAME,QAAQD,YAAY,KAAK;QAE/B,MAAME,gBAAgB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACJ;QAEpD,IAAII,cAAc,MAAM,IACpB,OAAOC,OAAO,IAAI,CAACD,cAAc,KAAK;QAG1C,MAAM,EAAE,OAAOE,OAAO,EAAEC,IAAI,EAAE,GAAGH,cAAc,KAAK;QAEpD,MAAMI,QAAQF,QAAQ,GAAG,CAACG,CAAAA,SAAU,IAAIC,cAAcD,QAAQN,OAAOF;QAErE,OAAOI,OAAO,EAAE,CAAC;YACbG;YACAD;QACJ;IACJ;AACJ;AAEO,MAAMI,sDAA4BC,0BAAAA,oBAA4B,CAAC;IAClE,gBAAgBhB;IAChB,cAAc;QAACiB;QAAiBC;QAAqBC;KAA6B;AACtF"}
1
+ {"version":3,"file":"features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { GetUserTeamsUseCase } from \"~/features/internal/GetUserTeams/index.js\";\nimport {\n ListWorkflowStatesRepository,\n ListWorkflowStatesUseCase as UseCase\n} from \"./abstractions.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\nimport { WorkflowStateFilter } from \"./WorkflowStateFilter.js\";\n\nclass ListWorkflowStatesUseCaseImpl implements UseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserTeams: GetUserTeamsUseCase.Interface,\n private repository: ListWorkflowStatesRepository.Interface,\n private stateFilter: WorkflowStateFilter.Interface\n ) {}\n\n async execute(params: UseCase.Params = {}): UseCase.Return {\n const identity = this.identityContext.getIdentity();\n\n const teamsResult = await this.getUserTeams.execute(identity.id);\n const teams = teamsResult.value;\n\n const requestedLimit = params.limit || 50;\n const accumulated: WorkflowState[] = [];\n let cursor: string | null = params.after || null;\n let totalCount = 0;\n let totalRemoved = 0;\n let hasMoreItems = false;\n\n while (accumulated.length < requestedLimit) {\n const recordsResult = await this.repository.execute({\n ...params,\n limit: requestedLimit,\n after: cursor || undefined\n });\n\n if (recordsResult.isFail()) {\n return Result.fail(recordsResult.error);\n }\n\n const { items: records, meta } = recordsResult.value;\n totalCount = meta.totalCount;\n\n const items = records.map(record => new WorkflowState(record, teams, identity));\n const filtered = await this.stateFilter.filter(items);\n\n totalRemoved += items.length - filtered.length;\n accumulated.push(...filtered);\n\n if (!meta.hasMoreItems) {\n hasMoreItems = accumulated.length > requestedLimit;\n cursor = null;\n break;\n }\n\n cursor = meta.cursor;\n hasMoreItems = true;\n }\n\n const items = accumulated.slice(0, requestedLimit);\n\n return Result.ok({\n items,\n meta: {\n totalCount: Math.max(0, totalCount - totalRemoved),\n hasMoreItems,\n cursor\n }\n });\n }\n}\n\nexport const ListWorkflowStatesUseCase = UseCase.createImplementation({\n implementation: ListWorkflowStatesUseCaseImpl,\n dependencies: [\n IdentityContext,\n GetUserTeamsUseCase,\n ListWorkflowStatesRepository,\n WorkflowStateFilter\n ]\n});\n"],"names":["ListWorkflowStatesUseCaseImpl","identityContext","getUserTeams","repository","stateFilter","params","identity","teamsResult","teams","requestedLimit","accumulated","cursor","totalCount","totalRemoved","hasMoreItems","recordsResult","undefined","Result","records","meta","items","record","WorkflowState","filtered","Math","ListWorkflowStatesUseCase","UseCase","IdentityContext","GetUserTeamsUseCase","ListWorkflowStatesRepository","WorkflowStateFilter"],"mappings":";;;;;;AAUA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,YAA2C,EAC3CC,UAAkD,EAClDC,WAA0C,CACpD;aAJUH,eAAe,GAAfA;aACAC,YAAY,GAAZA;aACAC,UAAU,GAAVA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,QAAQC,SAAyB,CAAC,CAAC,EAAkB;QACvD,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,MAAMC,cAAc,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAACD,SAAS,EAAE;QAC/D,MAAME,QAAQD,YAAY,KAAK;QAE/B,MAAME,iBAAiBJ,OAAO,KAAK,IAAI;QACvC,MAAMK,cAA+B,EAAE;QACvC,IAAIC,SAAwBN,OAAO,KAAK,IAAI;QAC5C,IAAIO,aAAa;QACjB,IAAIC,eAAe;QACnB,IAAIC,eAAe;QAEnB,MAAOJ,YAAY,MAAM,GAAGD,eAAgB;YACxC,MAAMM,gBAAgB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAChD,GAAGV,MAAM;gBACT,OAAOI;gBACP,OAAOE,UAAUK;YACrB;YAEA,IAAID,cAAc,MAAM,IACpB,OAAOE,OAAO,IAAI,CAACF,cAAc,KAAK;YAG1C,MAAM,EAAE,OAAOG,OAAO,EAAEC,IAAI,EAAE,GAAGJ,cAAc,KAAK;YACpDH,aAAaO,KAAK,UAAU;YAE5B,MAAMC,QAAQF,QAAQ,GAAG,CAACG,CAAAA,SAAU,IAAIC,cAAcD,QAAQb,OAAOF;YACrE,MAAMiB,WAAW,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAACH;YAE/CP,gBAAgBO,MAAM,MAAM,GAAGG,SAAS,MAAM;YAC9Cb,YAAY,IAAI,IAAIa;YAEpB,IAAI,CAACJ,KAAK,YAAY,EAAE;gBACpBL,eAAeJ,YAAY,MAAM,GAAGD;gBACpCE,SAAS;gBACT;YACJ;YAEAA,SAASQ,KAAK,MAAM;YACpBL,eAAe;QACnB;QAEA,MAAMM,QAAQV,YAAY,KAAK,CAAC,GAAGD;QAEnC,OAAOQ,OAAO,EAAE,CAAC;YACbG;YACA,MAAM;gBACF,YAAYI,KAAK,GAAG,CAAC,GAAGZ,aAAaC;gBACrCC;gBACAH;YACJ;QACJ;IACJ;AACJ;AAEO,MAAMc,sDAA4BC,0BAAAA,oBAA4B,CAAC;IAClE,gBAAgB1B;IAChB,cAAc;QACV2B;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -0,0 +1,8 @@
1
+ import type { WorkflowState } from "../../../domain/workflowState/WorkflowState.js";
2
+ export interface IWorkflowStateFilter {
3
+ filter(items: WorkflowState[]): Promise<WorkflowState[]>;
4
+ }
5
+ export declare const WorkflowStateFilter: import("@webiny/di").Abstraction<IWorkflowStateFilter>;
6
+ export declare namespace WorkflowStateFilter {
7
+ type Interface = IWorkflowStateFilter;
8
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const WorkflowStateFilter = createAbstraction("WorkflowStateFilter");
3
+ export { WorkflowStateFilter };
4
+
5
+ //# sourceMappingURL=WorkflowStateFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/workflowState/ListWorkflowStates/WorkflowStateFilter.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/WorkflowStateFilter.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\n\nexport interface IWorkflowStateFilter {\n filter(items: WorkflowState[]): Promise<WorkflowState[]>;\n}\n\nexport const WorkflowStateFilter = createAbstraction<IWorkflowStateFilter>(\"WorkflowStateFilter\");\n\nexport namespace WorkflowStateFilter {\n export type Interface = IWorkflowStateFilter;\n}\n"],"names":["WorkflowStateFilter","createAbstraction"],"mappings":";AAOO,MAAMA,sBAAsBC,kBAAwC"}
@@ -1,10 +1,12 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { ListWorkflowStatesUseCase } from "./ListWorkflowStatesUseCase.js";
3
3
  import { ListWorkflowStatesRepository } from "./ListWorkflowStatesRepository.js";
4
+ import { DefaultWorkflowStateFilter } from "./DefaultWorkflowStateFilter.js";
4
5
  const ListWorkflowStatesFeature = createFeature({
5
6
  name: "WorkflowState/ListWorkflowStates",
6
7
  register (container) {
7
8
  container.register(ListWorkflowStatesRepository).inSingletonScope();
9
+ container.register(DefaultWorkflowStateFilter);
8
10
  container.register(ListWorkflowStatesUseCase);
9
11
  }
10
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/workflowState/ListWorkflowStates/feature.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListWorkflowStatesUseCase } from \"./ListWorkflowStatesUseCase.js\";\nimport { ListWorkflowStatesRepository } from \"./ListWorkflowStatesRepository.js\";\n\nexport const ListWorkflowStatesFeature = createFeature({\n name: \"WorkflowState/ListWorkflowStates\",\n register(container) {\n container.register(ListWorkflowStatesRepository).inSingletonScope();\n container.register(ListWorkflowStatesUseCase);\n }\n});\n"],"names":["ListWorkflowStatesFeature","createFeature","container","ListWorkflowStatesRepository","ListWorkflowStatesUseCase"],"mappings":";;;AAIO,MAAMA,4BAA4BC,cAAc;IACnD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,8BAA8B,gBAAgB;QACjED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
1
+ {"version":3,"file":"features/workflowState/ListWorkflowStates/feature.js","sources":["../../../../src/features/workflowState/ListWorkflowStates/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListWorkflowStatesUseCase } from \"./ListWorkflowStatesUseCase.js\";\nimport { ListWorkflowStatesRepository } from \"./ListWorkflowStatesRepository.js\";\nimport { DefaultWorkflowStateFilter } from \"./DefaultWorkflowStateFilter.js\";\n\nexport const ListWorkflowStatesFeature = createFeature({\n name: \"WorkflowState/ListWorkflowStates\",\n register(container) {\n container.register(ListWorkflowStatesRepository).inSingletonScope();\n container.register(DefaultWorkflowStateFilter);\n container.register(ListWorkflowStatesUseCase);\n }\n});\n"],"names":["ListWorkflowStatesFeature","createFeature","container","ListWorkflowStatesRepository","DefaultWorkflowStateFilter","ListWorkflowStatesUseCase"],"mappings":";;;;AAKO,MAAMA,4BAA4BC,cAAc;IACnD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,8BAA8B,gBAAgB;QACjED,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;IACvB;AACJ"}
@@ -1 +1,2 @@
1
1
  export { ListWorkflowStatesUseCase, ListWorkflowStatesRepository } from "./abstractions.js";
2
+ export { WorkflowStateFilter } from "./WorkflowStateFilter.js";
@@ -1 +1,2 @@
1
1
  export { ListWorkflowStatesRepository, ListWorkflowStatesUseCase } from "./abstractions.js";
2
+ export { WorkflowStateFilter } from "./WorkflowStateFilter.js";
@@ -21,6 +21,6 @@ export declare const listWorkflowStatesValidation: zod.ZodOptional<zod.ZodObject
21
21
  isActive: zod.ZodOptional<zod.ZodBoolean>;
22
22
  }, zod.core.$strip>>;
23
23
  limit: zod.ZodOptional<zod.ZodNumber>;
24
- sort: zod.ZodOptional<zod.ZodArray<zod.ZodPipe<zod.ZodString, zod.ZodTransform<`${string}_DESC` | `${string}_ASC`, string>>>>;
24
+ sort: zod.ZodOptional<zod.ZodArray<zod.ZodPipe<zod.ZodString, zod.ZodTransform<`${string}_ASC` | `${string}_DESC`, string>>>>;
25
25
  after: zod.ZodPipe<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodString>>>, zod.ZodTransform<string | undefined, string | null | undefined>>;
26
26
  }, zod.core.$strip>>;
@@ -1,7 +1,7 @@
1
1
  import zod from "zod";
2
2
  export declare const listWorkflowsValidation: zod.ZodObject<{
3
3
  limit: zod.ZodOptional<zod.ZodNumber>;
4
- sort: zod.ZodOptional<zod.ZodArray<zod.ZodPipe<zod.ZodString, zod.ZodTransform<`${string}_DESC` | `${string}_ASC`, string>>>>;
4
+ sort: zod.ZodOptional<zod.ZodArray<zod.ZodPipe<zod.ZodString, zod.ZodTransform<`${string}_ASC` | `${string}_DESC`, string>>>>;
5
5
  after: zod.ZodPipe<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodString>>>, zod.ZodTransform<string | undefined, string | null | undefined>>;
6
6
  where: zod.ZodOptional<zod.ZodObject<{
7
7
  id: zod.ZodOptional<zod.ZodString>;
@@ -112,6 +112,7 @@ const createWorkflowStateSchema = ()=>new GraphQLSchemaPlugin({
112
112
  currentStep: WorkflowStateStep!
113
113
  nextStep: WorkflowStateStep
114
114
  previousStep: WorkflowStateStep
115
+ targetContext: JSON
115
116
  }
116
117
 
117
118
  type ListWorkflowStatesResponse {
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/workflowState.js","sources":["../../src/graphql/workflowState.ts"],"sourcesContent":["import { GraphQLSchemaPlugin, resolve, resolveList } from \"@webiny/handler-graphql\";\nimport { createZodError } from \"@webiny/utils\";\nimport { listWorkflowStatesValidation } from \"./validation/listWorkflowStates.js\";\nimport { startWorkflowStateValidation } from \"./validation/startWorkflowState.js\";\nimport { approveWorkflowStateValidation } from \"./validation/approveWorkflowState.js\";\nimport { rejectWorkflowStateValidation } from \"./validation/rejectWorkflowState.js\";\nimport { cancelWorkflowStateValidation } from \"./validation/cancelWorkflowState.js\";\nimport { createWorkflowStateValidation } from \"./validation/createWorkflowState.js\";\nimport { getTargetWorkflowStateValidation } from \"./validation/getTargetWorkflowState.js\";\nimport { getWorkflowStateValidation } from \"./validation/getWorkflowState.js\";\nimport { takeOverWorkflowStateStepValidation } from \"./validation/takeOverWorkflowStateStep.js\";\nimport { GetWorkflowStateUseCase } from \"~/features/workflowState/GetWorkflowState/index.js\";\nimport { GetTargetWorkflowStateUseCase } from \"~/features/workflowState/GetTargetWorkflowState/index.js\";\nimport { ListWorkflowStatesUseCase } from \"~/features/workflowState/ListWorkflowStates/index.js\";\nimport { ListOwnWorkflowStatesUseCase } from \"~/features/workflowState/ListOwnWorkflowStates/index.js\";\nimport { ListRequestedWorkflowStatesUseCase } from \"~/features/workflowState/ListRequestedWorkflowStates/index.js\";\nimport { CreateWorkflowStateUseCase } from \"~/features/workflowState/CreateWorkflowState/index.js\";\nimport { StartWorkflowStateStepUseCase } from \"~/features/workflowState/StartWorkflowStateStep/index.js\";\nimport { ApproveWorkflowStateStepUseCase } from \"~/features/workflowState/ApproveWorkflowStateStep/index.js\";\nimport { RejectWorkflowStateStepUseCase } from \"~/features/workflowState/RejectWorkflowStateStep/index.js\";\nimport { CancelWorkflowStateUseCase } from \"~/features/workflowState/CancelWorkflowState/index.js\";\nimport { TakeOverWorkflowStateStepUseCase } from \"~/features/workflowState/TakeOverWorkflowStateStep/index.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\nimport { WorkflowStateNotFoundError } from \"~/domain/workflowState/errors.js\";\n\nexport const createWorkflowStateSchema = () => {\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum CmsEntryStateValue {\n pending\n inReview\n approved\n rejected\n }\n\n type CmsEntrySystemWorkflow {\n workflowId: String\n stepId: ID\n stepName: String\n state: CmsEntryStateValue\n }\n\n extend type CmsEntrySystem {\n workflow: CmsEntrySystemWorkflow\n }\n\n input ListWhereInputCmsEntrySystemWorkflowStateInput {\n workflowId: String\n stepId: ID\n stepName: String\n state: CmsEntryStateValue\n }\n\n input ListWhereInputCmsEntrySystemWorkflowInput {\n workflowId: String\n stepId: ID\n state: ListWhereInputCmsEntrySystemWorkflowStateInput\n stepName: String\n }\n\n extend input ListWhereInputCmsEntrySystem {\n workflow: ListWhereInputCmsEntrySystemWorkflowInput\n }\n\n type WorkflowStateIdentity {\n id: String!\n displayName: String\n type: String\n }\n\n type WorkflowStateStepNotification {\n id: String!\n }\n\n type WorkflowStateStepTeam {\n id: String!\n }\n\n type WorkflowStateStep {\n # workflow related\n id: String!\n title: String!\n color: String!\n description: String\n teams: [WorkflowStateStepTeam!]!\n notifications: [WorkflowStateStepNotification!]\n # state related\n state: CmsEntryStateValue!\n comment: String\n savedBy: WorkflowStateIdentity\n # current user can take action on this step?\n canReview: Boolean!\n # is current user an owner of the step?\n isOwner: Boolean!\n # can current user take over this step?\n canTakeOver: Boolean!\n }\n\n type WorkflowState {\n id: String!\n app: String!\n title: String!\n isActive: Boolean!\n done: Boolean!\n workflowId: String!\n targetId: String!\n targetRevisionId: String!\n comment: String\n state: CmsEntryStateValue!\n steps: [WorkflowStateStep!]\n createdOn: DateTime!\n savedOn: DateTime!\n createdBy: WorkflowStateIdentity!\n savedBy: WorkflowStateIdentity!\n currentStep: WorkflowStateStep!\n nextStep: WorkflowStateStep\n previousStep: WorkflowStateStep\n }\n\n type ListWorkflowStatesResponse {\n data: [WorkflowState!]\n error: WorkflowError\n meta: ListWorkflowsMeta\n }\n\n enum ListWorkflowStatesSort {\n createdOn_ASC\n createdOn_DESC\n savedOn_ASC\n savedOn_DESC\n }\n\n input ListWorkflowStatesWhereStepsInput {\n id: String\n id_in: [String!]\n state: CmsEntryStateValue\n state_in: [CmsEntryStateValue!]\n savedBy: String\n savedBy_in: [String!]\n }\n\n input ListWorkflowStatesWhereTeamsInput {\n id: String\n id_in: [String!]\n }\n\n input ListWorkflowStatesWhereNotificationsInput {\n id: String\n id_in: [String!]\n }\n\n input ListWorkflowStatesWhereInput {\n app: String\n app_in: [String!]\n workflowId: String\n workflowId_in: [String!]\n targetId: String\n targetId_in: [String!]\n targetRevisionId: String\n targetRevisionId_in: [String!]\n state: CmsEntryStateValue\n state_in: [CmsEntryStateValue!]\n createdOn_gte: DateTime\n createdOn_lte: DateTime\n savedOn_gte: DateTime\n savedOn_lte: DateTime\n createdBy: String\n savedBy: String\n isActive: Boolean\n steps: ListWorkflowStatesWhereStepsInput\n teams: ListWorkflowStatesWhereTeamsInput\n notifications: ListWorkflowStatesWhereNotificationsInput\n }\n\n type WorkflowStateResponse {\n data: WorkflowState\n error: WorkflowError\n }\n\n type CancelWorkflowStateResponse {\n data: Boolean\n error: WorkflowError\n }\n\n type TakeOverWorkflowStateStepResponse {\n data: WorkflowState\n error: WorkflowError\n }\n\n extend type WorkflowsQuery {\n getWorkflowState(id: ID!): WorkflowStateResponse!\n # always returns active workflow state for the given targetRevisionId - or null\n getTargetWorkflowState(app: String!, targetRevisionId: ID!): WorkflowStateResponse!\n listWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n listOwnWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n listRequestedWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n }\n\n extend type WorkflowsMutation {\n createWorkflowState(\n app: String!\n targetRevisionId: ID!\n title: String!\n ): WorkflowStateResponse!\n startWorkflowStateStep(id: ID!): WorkflowStateResponse!\n approveWorkflowStateStep(id: ID!, comment: String): WorkflowStateResponse!\n rejectWorkflowStateStep(id: ID!, comment: String!): WorkflowStateResponse!\n cancelWorkflowState(id: ID!): CancelWorkflowStateResponse!\n takeOverWorkflowStateStep(id: ID!): TakeOverWorkflowStateStepResponse!\n }\n `,\n resolvers: {\n WorkflowState: {\n isActive: (parent: Partial<WorkflowState>) => {\n return parent.isActive || false;\n }\n },\n WorkflowsQuery: {\n getWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await getWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const getWorkflowState = context.container.resolve(GetWorkflowStateUseCase);\n const stateResult = await getWorkflowState.execute(result.data.id);\n\n if (stateResult.isFail()) {\n throw stateResult.error;\n }\n\n return stateResult.value;\n });\n },\n getTargetWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState | null>(async () => {\n const result = await getTargetWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const getTargetWorkflowState = context.container.resolve(\n GetTargetWorkflowStateUseCase\n );\n const stateResult = await getTargetWorkflowState.execute({\n app: result.data.app,\n targetRevisionId: result.data.targetRevisionId\n });\n /**\n * TODO determine if we want to throw error or return null when not found.\n */\n if (stateResult.isFail()) {\n if (stateResult.error instanceof WorkflowStateNotFoundError) {\n return null;\n }\n throw stateResult.error;\n }\n\n return stateResult.value;\n });\n },\n listWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listWorkflowStates =\n context.container.resolve(ListWorkflowStatesUseCase);\n const listResult = await listWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n },\n listOwnWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listOwnWorkflowStates = context.container.resolve(\n ListOwnWorkflowStatesUseCase\n );\n const listResult = await listOwnWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n },\n listRequestedWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listRequestedWorkflowStates = context.container.resolve(\n ListRequestedWorkflowStatesUseCase\n );\n const listResult = await listRequestedWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n }\n },\n WorkflowsMutation: {\n createWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await createWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const createWorkflowState = context.container.resolve(\n CreateWorkflowStateUseCase\n );\n const createResult = await createWorkflowState.execute({\n app: result.data.app,\n targetRevisionId: result.data.targetRevisionId,\n title: result.data.title\n });\n\n if (createResult.isFail()) {\n throw createResult.error;\n }\n\n return createResult.value;\n });\n },\n startWorkflowStateStep(_, args, context) {\n return resolve<WorkflowState>(async () => {\n const result = await startWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const startWorkflowStateStep = context.container.resolve(\n StartWorkflowStateStepUseCase\n );\n const startResult = await startWorkflowStateStep.execute(result.data.id);\n\n if (startResult.isFail()) {\n throw startResult.error;\n }\n\n return startResult.value;\n });\n },\n approveWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await approveWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const approveWorkflowStateStep = context.container.resolve(\n ApproveWorkflowStateStepUseCase\n );\n const approveResult = await approveWorkflowStateStep.execute(\n result.data.id,\n result.data.comment\n );\n\n if (approveResult.isFail()) {\n throw approveResult.error;\n }\n\n return approveResult.value;\n });\n },\n rejectWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await rejectWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const rejectWorkflowStateStep = context.container.resolve(\n RejectWorkflowStateStepUseCase\n );\n const rejectResult = await rejectWorkflowStateStep.execute(\n result.data.id,\n result.data.comment\n );\n\n if (rejectResult.isFail()) {\n throw rejectResult.error;\n }\n\n return rejectResult.value;\n });\n },\n cancelWorkflowState: (_, args, context) => {\n return resolve<boolean>(async () => {\n const result = await cancelWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const cancelWorkflowState = context.container.resolve(\n CancelWorkflowStateUseCase\n );\n const cancelResult = await cancelWorkflowState.execute(result.data.id);\n\n if (cancelResult.isFail()) {\n throw cancelResult.error;\n }\n\n return true;\n });\n },\n takeOverWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result =\n await takeOverWorkflowStateStepValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const takeOverWorkflowStateStep = context.container.resolve(\n TakeOverWorkflowStateStepUseCase\n );\n const takeOverResult = await takeOverWorkflowStateStep.execute(\n result.data.id\n );\n\n if (takeOverResult.isFail()) {\n throw takeOverResult.error;\n }\n\n return takeOverResult.value;\n });\n }\n }\n }\n });\n};\n"],"names":["createWorkflowStateSchema","GraphQLSchemaPlugin","parent","_","args","context","resolve","result","getWorkflowStateValidation","createZodError","getWorkflowState","GetWorkflowStateUseCase","stateResult","getTargetWorkflowStateValidation","getTargetWorkflowState","GetTargetWorkflowStateUseCase","WorkflowStateNotFoundError","resolveList","listWorkflowStatesValidation","listWorkflowStates","ListWorkflowStatesUseCase","listResult","listOwnWorkflowStates","ListOwnWorkflowStatesUseCase","listRequestedWorkflowStates","ListRequestedWorkflowStatesUseCase","createWorkflowStateValidation","createWorkflowState","CreateWorkflowStateUseCase","createResult","startWorkflowStateValidation","startWorkflowStateStep","StartWorkflowStateStepUseCase","startResult","approveWorkflowStateValidation","approveWorkflowStateStep","ApproveWorkflowStateStepUseCase","approveResult","rejectWorkflowStateValidation","rejectWorkflowStateStep","RejectWorkflowStateStepUseCase","rejectResult","cancelWorkflowStateValidation","cancelWorkflowState","CancelWorkflowStateUseCase","cancelResult","takeOverWorkflowStateStepValidation","takeOverWorkflowStateStep","TakeOverWorkflowStateStepUseCase","takeOverResult"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/workflowState.js","sources":["../../src/graphql/workflowState.ts"],"sourcesContent":["import { GraphQLSchemaPlugin, resolve, resolveList } from \"@webiny/handler-graphql\";\nimport { createZodError } from \"@webiny/utils\";\nimport { listWorkflowStatesValidation } from \"./validation/listWorkflowStates.js\";\nimport { startWorkflowStateValidation } from \"./validation/startWorkflowState.js\";\nimport { approveWorkflowStateValidation } from \"./validation/approveWorkflowState.js\";\nimport { rejectWorkflowStateValidation } from \"./validation/rejectWorkflowState.js\";\nimport { cancelWorkflowStateValidation } from \"./validation/cancelWorkflowState.js\";\nimport { createWorkflowStateValidation } from \"./validation/createWorkflowState.js\";\nimport { getTargetWorkflowStateValidation } from \"./validation/getTargetWorkflowState.js\";\nimport { getWorkflowStateValidation } from \"./validation/getWorkflowState.js\";\nimport { takeOverWorkflowStateStepValidation } from \"./validation/takeOverWorkflowStateStep.js\";\nimport { GetWorkflowStateUseCase } from \"~/features/workflowState/GetWorkflowState/index.js\";\nimport { GetTargetWorkflowStateUseCase } from \"~/features/workflowState/GetTargetWorkflowState/index.js\";\nimport { ListWorkflowStatesUseCase } from \"~/features/workflowState/ListWorkflowStates/index.js\";\nimport { ListOwnWorkflowStatesUseCase } from \"~/features/workflowState/ListOwnWorkflowStates/index.js\";\nimport { ListRequestedWorkflowStatesUseCase } from \"~/features/workflowState/ListRequestedWorkflowStates/index.js\";\nimport { CreateWorkflowStateUseCase } from \"~/features/workflowState/CreateWorkflowState/index.js\";\nimport { StartWorkflowStateStepUseCase } from \"~/features/workflowState/StartWorkflowStateStep/index.js\";\nimport { ApproveWorkflowStateStepUseCase } from \"~/features/workflowState/ApproveWorkflowStateStep/index.js\";\nimport { RejectWorkflowStateStepUseCase } from \"~/features/workflowState/RejectWorkflowStateStep/index.js\";\nimport { CancelWorkflowStateUseCase } from \"~/features/workflowState/CancelWorkflowState/index.js\";\nimport { TakeOverWorkflowStateStepUseCase } from \"~/features/workflowState/TakeOverWorkflowStateStep/index.js\";\nimport { WorkflowState } from \"~/domain/workflowState/WorkflowState.js\";\nimport { WorkflowStateNotFoundError } from \"~/domain/workflowState/errors.js\";\n\nexport const createWorkflowStateSchema = () => {\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum CmsEntryStateValue {\n pending\n inReview\n approved\n rejected\n }\n\n type CmsEntrySystemWorkflow {\n workflowId: String\n stepId: ID\n stepName: String\n state: CmsEntryStateValue\n }\n\n extend type CmsEntrySystem {\n workflow: CmsEntrySystemWorkflow\n }\n\n input ListWhereInputCmsEntrySystemWorkflowStateInput {\n workflowId: String\n stepId: ID\n stepName: String\n state: CmsEntryStateValue\n }\n\n input ListWhereInputCmsEntrySystemWorkflowInput {\n workflowId: String\n stepId: ID\n state: ListWhereInputCmsEntrySystemWorkflowStateInput\n stepName: String\n }\n\n extend input ListWhereInputCmsEntrySystem {\n workflow: ListWhereInputCmsEntrySystemWorkflowInput\n }\n\n type WorkflowStateIdentity {\n id: String!\n displayName: String\n type: String\n }\n\n type WorkflowStateStepNotification {\n id: String!\n }\n\n type WorkflowStateStepTeam {\n id: String!\n }\n\n type WorkflowStateStep {\n # workflow related\n id: String!\n title: String!\n color: String!\n description: String\n teams: [WorkflowStateStepTeam!]!\n notifications: [WorkflowStateStepNotification!]\n # state related\n state: CmsEntryStateValue!\n comment: String\n savedBy: WorkflowStateIdentity\n # current user can take action on this step?\n canReview: Boolean!\n # is current user an owner of the step?\n isOwner: Boolean!\n # can current user take over this step?\n canTakeOver: Boolean!\n }\n\n type WorkflowState {\n id: String!\n app: String!\n title: String!\n isActive: Boolean!\n done: Boolean!\n workflowId: String!\n targetId: String!\n targetRevisionId: String!\n comment: String\n state: CmsEntryStateValue!\n steps: [WorkflowStateStep!]\n createdOn: DateTime!\n savedOn: DateTime!\n createdBy: WorkflowStateIdentity!\n savedBy: WorkflowStateIdentity!\n currentStep: WorkflowStateStep!\n nextStep: WorkflowStateStep\n previousStep: WorkflowStateStep\n targetContext: JSON\n }\n\n type ListWorkflowStatesResponse {\n data: [WorkflowState!]\n error: WorkflowError\n meta: ListWorkflowsMeta\n }\n\n enum ListWorkflowStatesSort {\n createdOn_ASC\n createdOn_DESC\n savedOn_ASC\n savedOn_DESC\n }\n\n input ListWorkflowStatesWhereStepsInput {\n id: String\n id_in: [String!]\n state: CmsEntryStateValue\n state_in: [CmsEntryStateValue!]\n savedBy: String\n savedBy_in: [String!]\n }\n\n input ListWorkflowStatesWhereTeamsInput {\n id: String\n id_in: [String!]\n }\n\n input ListWorkflowStatesWhereNotificationsInput {\n id: String\n id_in: [String!]\n }\n\n input ListWorkflowStatesWhereInput {\n app: String\n app_in: [String!]\n workflowId: String\n workflowId_in: [String!]\n targetId: String\n targetId_in: [String!]\n targetRevisionId: String\n targetRevisionId_in: [String!]\n state: CmsEntryStateValue\n state_in: [CmsEntryStateValue!]\n createdOn_gte: DateTime\n createdOn_lte: DateTime\n savedOn_gte: DateTime\n savedOn_lte: DateTime\n createdBy: String\n savedBy: String\n isActive: Boolean\n steps: ListWorkflowStatesWhereStepsInput\n teams: ListWorkflowStatesWhereTeamsInput\n notifications: ListWorkflowStatesWhereNotificationsInput\n }\n\n type WorkflowStateResponse {\n data: WorkflowState\n error: WorkflowError\n }\n\n type CancelWorkflowStateResponse {\n data: Boolean\n error: WorkflowError\n }\n\n type TakeOverWorkflowStateStepResponse {\n data: WorkflowState\n error: WorkflowError\n }\n\n extend type WorkflowsQuery {\n getWorkflowState(id: ID!): WorkflowStateResponse!\n # always returns active workflow state for the given targetRevisionId - or null\n getTargetWorkflowState(app: String!, targetRevisionId: ID!): WorkflowStateResponse!\n listWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n listOwnWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n listRequestedWorkflowStates(\n where: ListWorkflowStatesWhereInput\n sort: [ListWorkflowStatesSort!]\n limit: Int\n after: String\n ): ListWorkflowStatesResponse!\n }\n\n extend type WorkflowsMutation {\n createWorkflowState(\n app: String!\n targetRevisionId: ID!\n title: String!\n ): WorkflowStateResponse!\n startWorkflowStateStep(id: ID!): WorkflowStateResponse!\n approveWorkflowStateStep(id: ID!, comment: String): WorkflowStateResponse!\n rejectWorkflowStateStep(id: ID!, comment: String!): WorkflowStateResponse!\n cancelWorkflowState(id: ID!): CancelWorkflowStateResponse!\n takeOverWorkflowStateStep(id: ID!): TakeOverWorkflowStateStepResponse!\n }\n `,\n resolvers: {\n WorkflowState: {\n isActive: (parent: Partial<WorkflowState>) => {\n return parent.isActive || false;\n }\n },\n WorkflowsQuery: {\n getWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await getWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const getWorkflowState = context.container.resolve(GetWorkflowStateUseCase);\n const stateResult = await getWorkflowState.execute(result.data.id);\n\n if (stateResult.isFail()) {\n throw stateResult.error;\n }\n\n return stateResult.value;\n });\n },\n getTargetWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState | null>(async () => {\n const result = await getTargetWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const getTargetWorkflowState = context.container.resolve(\n GetTargetWorkflowStateUseCase\n );\n const stateResult = await getTargetWorkflowState.execute({\n app: result.data.app,\n targetRevisionId: result.data.targetRevisionId\n });\n /**\n * TODO determine if we want to throw error or return null when not found.\n */\n if (stateResult.isFail()) {\n if (stateResult.error instanceof WorkflowStateNotFoundError) {\n return null;\n }\n throw stateResult.error;\n }\n\n return stateResult.value;\n });\n },\n listWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listWorkflowStates =\n context.container.resolve(ListWorkflowStatesUseCase);\n const listResult = await listWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n },\n listOwnWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listOwnWorkflowStates = context.container.resolve(\n ListOwnWorkflowStatesUseCase\n );\n const listResult = await listOwnWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n },\n listRequestedWorkflowStates: async (_, args, context) => {\n return resolveList<WorkflowState>(async () => {\n const result = await listWorkflowStatesValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const listRequestedWorkflowStates = context.container.resolve(\n ListRequestedWorkflowStatesUseCase\n );\n const listResult = await listRequestedWorkflowStates.execute({\n ...result.data,\n where: {\n values: {\n ...result.data?.where\n }\n }\n });\n\n if (listResult.isFail()) {\n throw listResult.error;\n }\n\n return listResult.value;\n });\n }\n },\n WorkflowsMutation: {\n createWorkflowState: async (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await createWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const createWorkflowState = context.container.resolve(\n CreateWorkflowStateUseCase\n );\n const createResult = await createWorkflowState.execute({\n app: result.data.app,\n targetRevisionId: result.data.targetRevisionId,\n title: result.data.title\n });\n\n if (createResult.isFail()) {\n throw createResult.error;\n }\n\n return createResult.value;\n });\n },\n startWorkflowStateStep(_, args, context) {\n return resolve<WorkflowState>(async () => {\n const result = await startWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const startWorkflowStateStep = context.container.resolve(\n StartWorkflowStateStepUseCase\n );\n const startResult = await startWorkflowStateStep.execute(result.data.id);\n\n if (startResult.isFail()) {\n throw startResult.error;\n }\n\n return startResult.value;\n });\n },\n approveWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await approveWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const approveWorkflowStateStep = context.container.resolve(\n ApproveWorkflowStateStepUseCase\n );\n const approveResult = await approveWorkflowStateStep.execute(\n result.data.id,\n result.data.comment\n );\n\n if (approveResult.isFail()) {\n throw approveResult.error;\n }\n\n return approveResult.value;\n });\n },\n rejectWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result = await rejectWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const rejectWorkflowStateStep = context.container.resolve(\n RejectWorkflowStateStepUseCase\n );\n const rejectResult = await rejectWorkflowStateStep.execute(\n result.data.id,\n result.data.comment\n );\n\n if (rejectResult.isFail()) {\n throw rejectResult.error;\n }\n\n return rejectResult.value;\n });\n },\n cancelWorkflowState: (_, args, context) => {\n return resolve<boolean>(async () => {\n const result = await cancelWorkflowStateValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const cancelWorkflowState = context.container.resolve(\n CancelWorkflowStateUseCase\n );\n const cancelResult = await cancelWorkflowState.execute(result.data.id);\n\n if (cancelResult.isFail()) {\n throw cancelResult.error;\n }\n\n return true;\n });\n },\n takeOverWorkflowStateStep: (_, args, context) => {\n return resolve<WorkflowState>(async () => {\n const result =\n await takeOverWorkflowStateStepValidation.safeParseAsync(args);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const takeOverWorkflowStateStep = context.container.resolve(\n TakeOverWorkflowStateStepUseCase\n );\n const takeOverResult = await takeOverWorkflowStateStep.execute(\n result.data.id\n );\n\n if (takeOverResult.isFail()) {\n throw takeOverResult.error;\n }\n\n return takeOverResult.value;\n });\n }\n }\n }\n });\n};\n"],"names":["createWorkflowStateSchema","GraphQLSchemaPlugin","parent","_","args","context","resolve","result","getWorkflowStateValidation","createZodError","getWorkflowState","GetWorkflowStateUseCase","stateResult","getTargetWorkflowStateValidation","getTargetWorkflowState","GetTargetWorkflowStateUseCase","WorkflowStateNotFoundError","resolveList","listWorkflowStatesValidation","listWorkflowStates","ListWorkflowStatesUseCase","listResult","listOwnWorkflowStates","ListOwnWorkflowStatesUseCase","listRequestedWorkflowStates","ListRequestedWorkflowStatesUseCase","createWorkflowStateValidation","createWorkflowState","CreateWorkflowStateUseCase","createResult","startWorkflowStateValidation","startWorkflowStateStep","StartWorkflowStateStepUseCase","startResult","approveWorkflowStateValidation","approveWorkflowStateStep","ApproveWorkflowStateStepUseCase","approveResult","rejectWorkflowStateValidation","rejectWorkflowStateStep","RejectWorkflowStateStepUseCase","rejectResult","cancelWorkflowStateValidation","cancelWorkflowState","CancelWorkflowStateUseCase","cancelResult","takeOverWorkflowStateStepValidation","takeOverWorkflowStateStep","TakeOverWorkflowStateStepUseCase","takeOverResult"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-workflows",
3
- "version": "0.0.0-unstable.7be00a75a9",
3
+ "version": "0.0.0-unstable.9f53ea597d",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -17,24 +17,24 @@
17
17
  },
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@webiny/api": "0.0.0-unstable.7be00a75a9",
21
- "@webiny/api-core": "0.0.0-unstable.7be00a75a9",
22
- "@webiny/api-headless-cms": "0.0.0-unstable.7be00a75a9",
23
- "@webiny/api-mailer": "0.0.0-unstable.7be00a75a9",
24
- "@webiny/feature": "0.0.0-unstable.7be00a75a9",
25
- "@webiny/handler": "0.0.0-unstable.7be00a75a9",
26
- "@webiny/handler-graphql": "0.0.0-unstable.7be00a75a9",
27
- "@webiny/utils": "0.0.0-unstable.7be00a75a9",
20
+ "@webiny/api": "0.0.0-unstable.9f53ea597d",
21
+ "@webiny/api-core": "0.0.0-unstable.9f53ea597d",
22
+ "@webiny/api-headless-cms": "0.0.0-unstable.9f53ea597d",
23
+ "@webiny/api-mailer": "0.0.0-unstable.9f53ea597d",
24
+ "@webiny/feature": "0.0.0-unstable.9f53ea597d",
25
+ "@webiny/handler": "0.0.0-unstable.9f53ea597d",
26
+ "@webiny/handler-graphql": "0.0.0-unstable.9f53ea597d",
27
+ "@webiny/utils": "0.0.0-unstable.9f53ea597d",
28
28
  "zod": "4.4.3"
29
29
  },
30
30
  "devDependencies": {
31
- "@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
32
- "@webiny/plugins": "0.0.0-unstable.7be00a75a9",
33
- "@webiny/project-utils": "0.0.0-unstable.7be00a75a9",
34
- "@webiny/testing": "0.0.0-unstable.7be00a75a9",
35
- "type-fest": "5.6.0",
36
- "typescript": "6.0.3",
37
- "vitest": "4.1.7"
31
+ "@webiny/build-tools": "0.0.0-unstable.9f53ea597d",
32
+ "@webiny/plugins": "0.0.0-unstable.9f53ea597d",
33
+ "@webiny/project-utils": "0.0.0-unstable.9f53ea597d",
34
+ "@webiny/testing": "0.0.0-unstable.9f53ea597d",
35
+ "type-fest": "5.8.0",
36
+ "typescript": "7.0.2",
37
+ "vitest": "4.1.10"
38
38
  },
39
39
  "publishConfig": {
40
40
  "access": "public"