@nocobase/app-plugin-projects 0.1.0-beta.6 → 0.1.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/README.md +56 -102
- package/dist/client/api/client.d.ts +4 -23
- package/dist/client/api/client.d.ts.map +1 -1
- package/dist/client/api/client.js +4 -48
- package/dist/client/api/client.js.map +1 -1
- package/dist/client/api/keys.d.ts +2 -8
- package/dist/client/api/keys.d.ts.map +1 -1
- package/dist/client/api/keys.js +2 -17
- package/dist/client/api/keys.js.map +1 -1
- package/dist/client/components/pm-badges.d.ts +1 -1
- package/dist/client/components/pm-badges.d.ts.map +1 -1
- package/dist/client/components/pm-executor-select.d.ts +2 -0
- package/dist/client/components/pm-executor-select.d.ts.map +1 -1
- package/dist/client/components/pm-executor-select.js.map +1 -1
- package/dist/client/components/ui/radio-group.d.ts +7 -0
- package/dist/client/components/ui/radio-group.d.ts.map +1 -0
- package/dist/client/components/ui/radio-group.js +12 -0
- package/dist/client/components/ui/radio-group.js.map +1 -0
- package/dist/client/config.d.ts +0 -2
- package/dist/client/config.d.ts.map +1 -1
- package/dist/client/config.js +1 -5
- package/dist/client/config.js.map +1 -1
- package/dist/client/issues.d.ts +2 -4
- package/dist/client/issues.d.ts.map +1 -1
- package/dist/client/issues.js +2 -3
- package/dist/client/issues.js.map +1 -1
- package/dist/client/kit/plans/lookup.d.ts +2 -2
- package/dist/client/kit/plans/lookup.js +3 -3
- package/dist/client/kit/plans/lookup.js.map +1 -1
- package/dist/client/kit/plans/plan-row.js +2 -2
- package/dist/client/kit/plans/plan-row.js.map +1 -1
- package/dist/client/kit.d.ts +2 -9
- package/dist/client/kit.d.ts.map +1 -1
- package/dist/client/kit.js +2 -9
- package/dist/client/kit.js.map +1 -1
- package/dist/client/lib/kinds.d.ts +3 -29
- package/dist/client/lib/kinds.d.ts.map +1 -1
- package/dist/client/lib/kinds.js +7 -46
- package/dist/client/lib/kinds.js.map +1 -1
- package/dist/client/lib/status-events.d.ts +21 -0
- package/dist/client/lib/status-events.d.ts.map +1 -0
- package/dist/client/lib/status-events.js +31 -0
- package/dist/client/lib/status-events.js.map +1 -0
- package/dist/client/lib/status.d.ts +5 -7
- package/dist/client/lib/status.d.ts.map +1 -1
- package/dist/client/lib/status.js +5 -7
- package/dist/client/lib/status.js.map +1 -1
- package/dist/client/locales/en-US.d.ts +7 -252
- package/dist/client/locales/en-US.d.ts.map +1 -1
- package/dist/client/locales/en-US.js +10 -251
- package/dist/client/locales/en-US.js.map +1 -1
- package/dist/client/locales/zh-CN.d.ts.map +1 -1
- package/dist/client/locales/zh-CN.js +11 -244
- package/dist/client/locales/zh-CN.js.map +1 -1
- package/dist/client/pages/issues/board/board-model.d.ts +1 -1
- package/dist/client/pages/issues/board/board-model.js +1 -1
- package/dist/client/pages/issues/board/use-board-move.d.ts +2 -8
- package/dist/client/pages/issues/board/use-board-move.d.ts.map +1 -1
- package/dist/client/pages/issues/board/use-board-move.js +5 -42
- package/dist/client/pages/issues/board/use-board-move.js.map +1 -1
- package/dist/client/pages/issues/detail/new-subtask.d.ts.map +1 -1
- package/dist/client/pages/issues/detail/new-subtask.js +6 -28
- package/dist/client/pages/issues/detail/new-subtask.js.map +1 -1
- package/dist/client/pages/issues/detail/subtask-model.d.ts +1 -1
- package/dist/client/pages/issues/detail/subtask-model.js +1 -1
- package/dist/client/pages/issues/detail/use-confirmed-update.d.ts +6 -8
- package/dist/client/pages/issues/detail/use-confirmed-update.d.ts.map +1 -1
- package/dist/client/pages/issues/detail/use-confirmed-update.js +9 -42
- package/dist/client/pages/issues/detail/use-confirmed-update.js.map +1 -1
- package/dist/client/pages/issues/detail/use-issue-page.d.ts +0 -4
- package/dist/client/pages/issues/detail/use-issue-page.d.ts.map +1 -1
- package/dist/client/pages/issues/detail/use-issue-page.js +0 -14
- package/dist/client/pages/issues/detail/use-issue-page.js.map +1 -1
- package/dist/client/pages/issues/detail/use-issue-update.d.ts +2 -2
- package/dist/client/pages/issues/detail/use-issue-update.d.ts.map +1 -1
- package/dist/client/pages/issues/detail/use-issue-update.js +4 -6
- package/dist/client/pages/issues/detail/use-issue-update.js.map +1 -1
- package/dist/client/pages/issues/new-issue-form.d.ts +11 -8
- package/dist/client/pages/issues/new-issue-form.d.ts.map +1 -1
- package/dist/client/pages/issues/new-issue-form.js +47 -79
- package/dist/client/pages/issues/new-issue-form.js.map +1 -1
- package/dist/client/pages/issues/new.d.ts.map +1 -1
- package/dist/client/pages/issues/new.js +2 -1
- package/dist/client/pages/issues/new.js.map +1 -1
- package/dist/client/pages/issues/use-executor-options.d.ts +3 -2
- package/dist/client/pages/issues/use-executor-options.d.ts.map +1 -1
- package/dist/client/pages/issues/use-executor-options.js +5 -23
- package/dist/client/pages/issues/use-executor-options.js.map +1 -1
- package/dist/client/pages/projects/detail/use-project-page.d.ts +4 -26
- package/dist/client/pages/projects/detail/use-project-page.d.ts.map +1 -1
- package/dist/client/pages/projects/detail/use-project-page.js +7 -53
- package/dist/client/pages/projects/detail/use-project-page.js.map +1 -1
- package/dist/client/pages/projects/new.d.ts +1 -1
- package/dist/client/pages/projects/new.d.ts.map +1 -1
- package/dist/client/pages/projects/new.js +3 -7
- package/dist/client/pages/projects/new.js.map +1 -1
- package/dist/client/plugin.d.ts +3 -0
- package/dist/client/plugin.d.ts.map +1 -1
- package/dist/client/plugin.js +8 -1
- package/dist/client/plugin.js.map +1 -1
- package/dist/client/projects.d.ts +2 -2
- package/dist/client/projects.d.ts.map +1 -1
- package/dist/client/projects.js +2 -2
- package/dist/client/projects.js.map +1 -1
- package/dist/client/providers/query-provider.d.ts.map +1 -1
- package/dist/client/providers/query-provider.js +0 -4
- package/dist/client/providers/query-provider.js.map +1 -1
- package/dist/database/migrations/.manifest.json +4 -0
- package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts +4 -0
- package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts.map +1 -0
- package/dist/database/migrations/202610240010_pm_fixed_statuses.js +189 -0
- package/dist/database/migrations/202610240010_pm_fixed_statuses.js.map +1 -0
- package/dist/server/composition.d.ts +11 -17
- package/dist/server/composition.d.ts.map +1 -1
- package/dist/server/composition.js +11 -56
- package/dist/server/composition.js.map +1 -1
- package/dist/server/domains/comments/comment.queries.d.ts +10 -7
- package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
- package/dist/server/domains/comments/comment.queries.js +10 -3
- package/dist/server/domains/comments/comment.queries.js.map +1 -1
- package/dist/server/domains/comments/comment.routes.d.ts +1 -1
- package/dist/server/domains/comments/comment.routes.js +4 -4
- package/dist/server/domains/comments/comment.routes.js.map +1 -1
- package/dist/server/domains/comments/comment.service.d.ts +2 -2
- package/dist/server/domains/comments/comment.service.d.ts.map +1 -1
- package/dist/server/domains/comments/comment.service.js +6 -3
- package/dist/server/domains/comments/comment.service.js.map +1 -1
- package/dist/server/domains/comments/comment.store.d.ts +3 -1
- package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
- package/dist/server/domains/comments/comment.store.js +10 -2
- package/dist/server/domains/comments/comment.store.js.map +1 -1
- package/dist/server/domains/comments/ports.d.ts +7 -2
- package/dist/server/domains/comments/ports.d.ts.map +1 -1
- package/dist/server/domains/issues/index.d.ts +1 -1
- package/dist/server/domains/issues/index.d.ts.map +1 -1
- package/dist/server/domains/issues/index.js +1 -1
- package/dist/server/domains/issues/index.js.map +1 -1
- package/dist/server/domains/issues/issue.context.d.ts +6 -22
- package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.context.js +1 -22
- package/dist/server/domains/issues/issue.context.js.map +1 -1
- package/dist/server/domains/issues/issue.fields.d.ts +3 -3
- package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.fields.js +12 -15
- package/dist/server/domains/issues/issue.fields.js.map +1 -1
- package/dist/server/domains/issues/issue.projects.d.ts +2 -2
- package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.projects.js +1 -2
- package/dist/server/domains/issues/issue.projects.js.map +1 -1
- package/dist/server/domains/issues/issue.queries.d.ts +5 -7
- package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.queries.js +12 -41
- package/dist/server/domains/issues/issue.queries.js.map +1 -1
- package/dist/server/domains/issues/issue.routes.d.ts +1 -1
- package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.routes.js +17 -37
- package/dist/server/domains/issues/issue.routes.js.map +1 -1
- package/dist/server/domains/issues/issue.service.d.ts +20 -44
- package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.service.js +19 -80
- package/dist/server/domains/issues/issue.service.js.map +1 -1
- package/dist/server/domains/issues/issue.status.d.ts +6 -10
- package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
- package/dist/server/domains/issues/issue.status.js +3 -20
- package/dist/server/domains/issues/issue.status.js.map +1 -1
- package/dist/server/domains/issues/ports.d.ts +24 -34
- package/dist/server/domains/issues/ports.d.ts.map +1 -1
- package/dist/server/domains/issues/ports.js +0 -5
- package/dist/server/domains/issues/ports.js.map +1 -1
- package/dist/server/domains/notices/notice.planner.d.ts +2 -1
- package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
- package/dist/server/domains/notices/notice.planner.js +2 -1
- package/dist/server/domains/notices/notice.planner.js.map +1 -1
- package/dist/server/domains/notices/notice.rules.d.ts +1 -4
- package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
- package/dist/server/domains/notices/notice.rules.js +4 -5
- package/dist/server/domains/notices/notice.rules.js.map +1 -1
- package/dist/server/domains/plans/plan.ops.d.ts +3 -3
- package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
- package/dist/server/domains/plans/plan.ops.js +7 -10
- package/dist/server/domains/plans/plan.ops.js.map +1 -1
- package/dist/server/domains/projects/index.d.ts +1 -1
- package/dist/server/domains/projects/index.d.ts.map +1 -1
- package/dist/server/domains/projects/index.js.map +1 -1
- package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
- package/dist/server/domains/projects/project.routes.js +1 -3
- package/dist/server/domains/projects/project.routes.js.map +1 -1
- package/dist/server/domains/projects/project.service.d.ts +0 -7
- package/dist/server/domains/projects/project.service.d.ts.map +1 -1
- package/dist/server/domains/projects/project.service.js +0 -17
- package/dist/server/domains/projects/project.service.js.map +1 -1
- package/dist/server/domains/projects/project.store.d.ts +0 -1
- package/dist/server/domains/projects/project.store.d.ts.map +1 -1
- package/dist/server/domains/projects/project.store.js +0 -1
- package/dist/server/domains/projects/project.store.js.map +1 -1
- package/dist/server/domains/reports/report.service.d.ts +1 -12
- package/dist/server/domains/reports/report.service.d.ts.map +1 -1
- package/dist/server/domains/reports/report.service.js +23 -79
- package/dist/server/domains/reports/report.service.js.map +1 -1
- package/dist/server/domains/statuses/event-types.d.ts +16 -0
- package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
- package/dist/server/domains/statuses/event-types.js +31 -0
- package/dist/server/domains/statuses/event-types.js.map +1 -0
- package/dist/server/domains/statuses/index.d.ts +4 -0
- package/dist/server/domains/statuses/index.d.ts.map +1 -0
- package/dist/server/domains/statuses/index.js +4 -0
- package/dist/server/domains/statuses/index.js.map +1 -0
- package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
- package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
- package/dist/server/domains/statuses/status.catalog.js +119 -0
- package/dist/server/domains/statuses/status.catalog.js.map +1 -0
- package/dist/server/domains/statuses/status.events.d.ts +15 -0
- package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
- package/dist/server/domains/statuses/status.events.js +2 -0
- package/dist/server/domains/statuses/status.events.js.map +1 -0
- package/dist/server/domains/statuses/status.fire.d.ts +48 -0
- package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
- package/dist/server/domains/statuses/status.fire.js +38 -0
- package/dist/server/domains/statuses/status.fire.js.map +1 -0
- package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
- package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
- package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
- package/dist/server/domains/subtasks/subtask.blocking.d.ts +4 -4
- package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
- package/dist/server/domains/subtasks/subtask.blocking.js +2 -10
- package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
- package/dist/server/domains/subtasks/subtask.release.d.ts +5 -9
- package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
- package/dist/server/domains/subtasks/subtask.release.js +0 -4
- package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
- package/dist/server/domains/subtasks/subtask.service.d.ts +1 -3
- package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
- package/dist/server/domains/subtasks/subtask.service.js +0 -12
- package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
- package/dist/server/kernel/http.d.ts.map +1 -1
- package/dist/server/kernel/http.js +0 -3
- package/dist/server/kernel/http.js.map +1 -1
- package/dist/server/kernel/kinds.d.ts +24 -6
- package/dist/server/kernel/kinds.d.ts.map +1 -1
- package/dist/server/kernel/kinds.js +21 -1
- package/dist/server/kernel/kinds.js.map +1 -1
- package/dist/server/kernel/work.d.ts +12 -6
- package/dist/server/kernel/work.d.ts.map +1 -1
- package/dist/server/kernel/work.js +33 -15
- package/dist/server/kernel/work.js.map +1 -1
- package/dist/server/locales/en-US.d.ts +0 -9
- package/dist/server/locales/en-US.d.ts.map +1 -1
- package/dist/server/locales/en-US.js +0 -9
- package/dist/server/locales/en-US.js.map +1 -1
- package/dist/server/locales/zh-CN.d.ts.map +1 -1
- package/dist/server/locales/zh-CN.js +2 -11
- package/dist/server/locales/zh-CN.js.map +1 -1
- package/dist/server/providers/notifications.d.ts +1 -0
- package/dist/server/providers/notifications.d.ts.map +1 -1
- package/dist/server/providers/notifications.js +6 -120
- package/dist/server/providers/notifications.js.map +1 -1
- package/dist/server/providers/projects.d.ts +3 -8
- package/dist/server/providers/projects.d.ts.map +1 -1
- package/dist/server/providers/projects.js +8 -27
- package/dist/server/providers/projects.js.map +1 -1
- package/dist/server/routes/api.d.ts.map +1 -1
- package/dist/server/routes/api.js +0 -6
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/schemas.d.ts +5 -27
- package/dist/server/routes/schemas.d.ts.map +1 -1
- package/dist/server/routes/schemas.js +19 -163
- package/dist/server/routes/schemas.js.map +1 -1
- package/dist/server/tokens.d.ts +12 -34
- package/dist/server/tokens.d.ts.map +1 -1
- package/dist/server/tokens.js +4 -16
- package/dist/server/tokens.js.map +1 -1
- package/dist/shared/access.d.ts +0 -1
- package/dist/shared/access.d.ts.map +1 -1
- package/dist/shared/access.js +2 -11
- package/dist/shared/access.js.map +1 -1
- package/dist/shared/issues.d.ts +5 -36
- package/dist/shared/issues.d.ts.map +1 -1
- package/dist/shared/issues.js.map +1 -1
- package/dist/shared/kinds.d.ts +3 -1
- package/dist/shared/kinds.d.ts.map +1 -1
- package/dist/shared/kinds.js +1 -1
- package/dist/shared/locales/access.en-US.d.ts +0 -1
- package/dist/shared/locales/access.en-US.d.ts.map +1 -1
- package/dist/shared/locales/access.en-US.js +1 -2
- package/dist/shared/locales/access.en-US.js.map +1 -1
- package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
- package/dist/shared/locales/access.zh-CN.js +1 -2
- package/dist/shared/locales/access.zh-CN.js.map +1 -1
- package/dist/shared/plans.d.ts +4 -6
- package/dist/shared/plans.d.ts.map +1 -1
- package/dist/shared/plans.js +2 -1
- package/dist/shared/plans.js.map +1 -1
- package/dist/shared/projects.d.ts +0 -4
- package/dist/shared/projects.d.ts.map +1 -1
- package/dist/shared/projects.js.map +1 -1
- package/dist/shared/realtime.d.ts +1 -1
- package/dist/shared/realtime.d.ts.map +1 -1
- package/dist/shared/statuses.d.ts +42 -0
- package/dist/shared/statuses.d.ts.map +1 -0
- package/dist/shared/statuses.js +73 -0
- package/dist/shared/statuses.js.map +1 -0
- package/dist/shared/subtasks.d.ts +3 -3
- package/dist/shared/subtasks.d.ts.map +1 -1
- package/package.json +11 -19
- package/skills/nocobase-app-plugin-projects/SKILL.md +26 -50
- package/dist/client/hooks/use-workflow-leave-guard.d.ts +0 -3
- package/dist/client/hooks/use-workflow-leave-guard.d.ts.map +0 -1
- package/dist/client/hooks/use-workflow-leave-guard.js +0 -31
- package/dist/client/hooks/use-workflow-leave-guard.js.map +0 -1
- package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
- package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
- package/dist/client/lib/built-in-rule-editors.js +0 -86
- package/dist/client/lib/built-in-rule-editors.js.map +0 -1
- package/dist/client/lib/built-in-rule-types.d.ts +0 -3
- package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
- package/dist/client/lib/built-in-rule-types.js +0 -63
- package/dist/client/lib/built-in-rule-types.js.map +0 -1
- package/dist/client/lib/status-rule-types.d.ts +0 -60
- package/dist/client/lib/status-rule-types.d.ts.map +0 -1
- package/dist/client/lib/status-rule-types.js +0 -38
- package/dist/client/lib/status-rule-types.js.map +0 -1
- package/dist/client/lib/workflow-events.d.ts +0 -25
- package/dist/client/lib/workflow-events.d.ts.map +0 -1
- package/dist/client/lib/workflow-events.js +0 -30
- package/dist/client/lib/workflow-events.js.map +0 -1
- package/dist/client/pages/config/workflow-detail.d.ts +0 -10
- package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
- package/dist/client/pages/config/workflow-detail.js +0 -188
- package/dist/client/pages/config/workflow-detail.js.map +0 -1
- package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
- package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/flow-editor.js +0 -76
- package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
- package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
- package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/status-rules.js +0 -203
- package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
- package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
- package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
- package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
- package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
- package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/use-status-name.js +0 -17
- package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
- package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
- package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
- package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
- package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
- package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/workflow-model.js +0 -403
- package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
- package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
- package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
- package/dist/client/pages/config/workflows/workflow-views.js +0 -76
- package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
- package/dist/client/pages/config/workflows.d.ts +0 -8
- package/dist/client/pages/config/workflows.d.ts.map +0 -1
- package/dist/client/pages/config/workflows.js +0 -139
- package/dist/client/pages/config/workflows.js.map +0 -1
- package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
- package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
- package/dist/client/pages/issues/detail/start-dialog.js +0 -31
- package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
- package/dist/client/pages/projects/workflow-select.d.ts +0 -14
- package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
- package/dist/client/pages/projects/workflow-select.js +0 -34
- package/dist/client/pages/projects/workflow-select.js.map +0 -1
- package/dist/server/domains/approvals/approval.events.d.ts +0 -47
- package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
- package/dist/server/domains/approvals/approval.events.js +0 -2
- package/dist/server/domains/approvals/approval.events.js.map +0 -1
- package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
- package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
- package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
- package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
- package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
- package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
- package/dist/server/domains/approvals/approval.routes.js +0 -87
- package/dist/server/domains/approvals/approval.routes.js.map +0 -1
- package/dist/server/domains/approvals/approval.service.d.ts +0 -72
- package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
- package/dist/server/domains/approvals/approval.service.js +0 -261
- package/dist/server/domains/approvals/approval.service.js.map +0 -1
- package/dist/server/domains/approvals/approval.store.d.ts +0 -42
- package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
- package/dist/server/domains/approvals/approval.store.js +0 -66
- package/dist/server/domains/approvals/approval.store.js.map +0 -1
- package/dist/server/domains/approvals/index.d.ts +0 -4
- package/dist/server/domains/approvals/index.d.ts.map +0 -1
- package/dist/server/domains/approvals/index.js +0 -3
- package/dist/server/domains/approvals/index.js.map +0 -1
- package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
- package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
- package/dist/server/domains/checklists/checklist.routes.js +0 -62
- package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
- package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
- package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
- package/dist/server/domains/checklists/checklist.service.js +0 -80
- package/dist/server/domains/checklists/checklist.service.js.map +0 -1
- package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
- package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
- package/dist/server/domains/checklists/checklist.store.js +0 -66
- package/dist/server/domains/checklists/checklist.store.js.map +0 -1
- package/dist/server/domains/checklists/index.d.ts +0 -4
- package/dist/server/domains/checklists/index.d.ts.map +0 -1
- package/dist/server/domains/checklists/index.js +0 -4
- package/dist/server/domains/checklists/index.js.map +0 -1
- package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
- package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
- package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
- package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
- package/dist/server/domains/workflows/event-types.d.ts +0 -21
- package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
- package/dist/server/domains/workflows/event-types.js +0 -31
- package/dist/server/domains/workflows/event-types.js.map +0 -1
- package/dist/server/domains/workflows/index.d.ts +0 -10
- package/dist/server/domains/workflows/index.d.ts.map +0 -1
- package/dist/server/domains/workflows/index.js +0 -10
- package/dist/server/domains/workflows/index.js.map +0 -1
- package/dist/server/domains/workflows/rule-types.d.ts +0 -129
- package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
- package/dist/server/domains/workflows/rule-types.js +0 -33
- package/dist/server/domains/workflows/rule-types.js.map +0 -1
- package/dist/server/domains/workflows/templates.d.ts +0 -62
- package/dist/server/domains/workflows/templates.d.ts.map +0 -1
- package/dist/server/domains/workflows/templates.js +0 -63
- package/dist/server/domains/workflows/templates.js.map +0 -1
- package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
- package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.diff.js +0 -80
- package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
- package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
- package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.events.js +0 -2
- package/dist/server/domains/workflows/workflow.events.js.map +0 -1
- package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
- package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.fire.js +0 -57
- package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
- package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
- package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.registry.js +0 -132
- package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
- package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
- package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.routes.js +0 -148
- package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
- package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
- package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.rules.js +0 -190
- package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
- package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
- package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.service.js +0 -365
- package/dist/server/domains/workflows/workflow.service.js.map +0 -1
- package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
- package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
- package/dist/server/domains/workflows/workflow.store.js +0 -148
- package/dist/server/domains/workflows/workflow.store.js.map +0 -1
- package/dist/shared/approvals.d.ts +0 -37
- package/dist/shared/approvals.d.ts.map +0 -1
- package/dist/shared/approvals.js +0 -4
- package/dist/shared/approvals.js.map +0 -1
- package/dist/shared/checklists.d.ts +0 -27
- package/dist/shared/checklists.d.ts.map +0 -1
- package/dist/shared/checklists.js +0 -7
- package/dist/shared/checklists.js.map +0 -1
- package/dist/shared/workflows.d.ts +0 -267
- package/dist/shared/workflows.d.ts.map +0 -1
- package/dist/shared/workflows.js +0 -149
- package/dist/shared/workflows.js.map +0 -1
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflows: the statuses of a project's issues and who may move an issue between them. Every member reads them; the
|
|
3
|
-
* settings item `pm.workflows`'s `update` creates, edits and deletes them and picks the default.
|
|
4
|
-
*
|
|
5
|
-
* A workflow keeps the issues that use it valid: a change that drops a status some issue is in, a project switching
|
|
6
|
-
* to a workflow without such a status, and a new default missing a status of issues on the default are all refused
|
|
7
|
-
* with 400 `WORKFLOW_STATUS_CONFLICT`, listing the issues per status and project. The default workflow is never
|
|
8
|
-
* deleted, nor one a project uses (400 `WORKFLOW_IN_USE`).
|
|
9
|
-
*
|
|
10
|
-
* Other plugins' templates (`templates.ts`) are installed once each (`installTemplate`); `preview` says what saving a
|
|
11
|
-
* definition would change in the rules, before it is saved.
|
|
12
|
-
*
|
|
13
|
-
* The issues domain reads statuses through `catalogs` (compiled once per workflow and kept until a write in this
|
|
14
|
-
* process), and the projects domain checks a project's choice through `projects`.
|
|
15
|
-
*/
|
|
16
|
-
import type { DatabaseConnection } from '@nocobase/db';
|
|
17
|
-
import { type CreateWorkflowRequest, type UpdateWorkflowRequest, type WorkflowListItem, type WorkflowPreview } from '../../../shared/workflows.js';
|
|
18
|
-
import { type Viewer } from '../../access/viewer.js';
|
|
19
|
-
import type { IdSource } from '../../kernel/ids.js';
|
|
20
|
-
import type { Tx, TxRunner } from '../../kernel/tx.js';
|
|
21
|
-
import type { StatusCatalogs } from '../issues/index.js';
|
|
22
|
-
import './workflow.events.js';
|
|
23
|
-
import type { IssueRules } from '../issues/index.js';
|
|
24
|
-
import type { KindRegistry } from '../../kernel/kinds.js';
|
|
25
|
-
import type { StatusRuleTypes } from './rule-types.js';
|
|
26
|
-
import type { WorkflowEventTypes } from './event-types.js';
|
|
27
|
-
import type { WorkflowTemplate, WorkflowTemplates } from './templates.js';
|
|
28
|
-
/** What projects need from workflows. */
|
|
29
|
-
export interface ProjectWorkflows {
|
|
30
|
-
/** 400 `INVALID_WORKFLOW` unless the id names a workflow. */
|
|
31
|
-
requireExisting(conn: DatabaseConnection, id: string): Promise<void>;
|
|
32
|
-
/** 400 `WORKFLOW_STATUS_CONFLICT` when an issue of the project is in a status `workflowId` (null: the default) lacks. */
|
|
33
|
-
assertCompatible(conn: DatabaseConnection, projectId: string, workflowId: string | null): Promise<void>;
|
|
34
|
-
/** Announces that the project now uses another workflow. */
|
|
35
|
-
switched(tx: Tx, workflowId: string | null): void;
|
|
36
|
-
}
|
|
37
|
-
export interface WorkflowService {
|
|
38
|
-
list(viewer: Viewer): Promise<WorkflowListItem[]>;
|
|
39
|
-
get(viewer: Viewer, id: string): Promise<WorkflowListItem>;
|
|
40
|
-
create(viewer: Viewer, input: CreateWorkflowRequest): Promise<WorkflowListItem>;
|
|
41
|
-
update(viewer: Viewer, id: string, input: UpdateWorkflowRequest): Promise<WorkflowListItem>;
|
|
42
|
-
remove(viewer: Viewer, id: string): Promise<void>;
|
|
43
|
-
setDefault(viewer: Viewer, id: string): Promise<WorkflowListItem>;
|
|
44
|
-
/** What saving `definition` would change in the rules; 400 `INVALID_WORKFLOW` as saving would. Nothing is written. */
|
|
45
|
-
preview(viewer: Viewer, id: string, input: {
|
|
46
|
-
readonly definition: unknown;
|
|
47
|
-
}): Promise<WorkflowPreview>;
|
|
48
|
-
/**
|
|
49
|
-
* Creates the workflow of a template unless it was installed before (even if deleted since) or a workflow with its
|
|
50
|
-
* key exists; true when it created one. Its name gets the key appended when another workflow has it. With
|
|
51
|
-
* `makeDefault`, it becomes the default when none is and every issue on the built-in statuses keeps its status.
|
|
52
|
-
*/
|
|
53
|
-
installTemplate(template: WorkflowTemplate): Promise<boolean>;
|
|
54
|
-
readonly catalogs: StatusCatalogs;
|
|
55
|
-
readonly projects: ProjectWorkflows;
|
|
56
|
-
}
|
|
57
|
-
export declare function createWorkflowService(deps: {
|
|
58
|
-
readonly tx: TxRunner;
|
|
59
|
-
readonly ids: IdSource;
|
|
60
|
-
/** The rules a workflow may name. */
|
|
61
|
-
readonly registry: IssueRules;
|
|
62
|
-
/** The kinds a transition may name. */
|
|
63
|
-
readonly kinds: KindRegistry;
|
|
64
|
-
/** Every status rule type: this plugin's own and those other plugins contribute. */
|
|
65
|
-
readonly ruleTypes?: StatusRuleTypes;
|
|
66
|
-
/** The workflow events other plugins contribute. */
|
|
67
|
-
readonly events?: WorkflowEventTypes;
|
|
68
|
-
/** Other plugins' templates, for the names of the workflows they created. */
|
|
69
|
-
readonly templates?: WorkflowTemplates;
|
|
70
|
-
}): WorkflowService;
|
|
71
|
-
//# sourceMappingURL=workflow.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.service.d.ts","sourceRoot":"","sources":["../../../../server/domains/workflows/workflow.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
import { ANY_STATUS, BUILTIN_STATUSES, INITIAL_STATUS, WORKFLOW_NAME_MAX, } from '../../../shared/workflows.js';
|
|
2
|
-
import { requireSetting } from '../../access/viewer.js';
|
|
3
|
-
import { isUniqueViolation, unique } from '../../kernel/db.js';
|
|
4
|
-
import { conflict, invalid, notFound } from '../../kernel/errors.js';
|
|
5
|
-
import { optionalText, requiredText } from '../../kernel/validate.js';
|
|
6
|
-
import { compile } from '../../lifecycle/index.js';
|
|
7
|
-
import './workflow.events.js';
|
|
8
|
-
import { checkDefinition } from './workflow.rules.js';
|
|
9
|
-
import { ruleMessage } from './built-in-rule-types.js';
|
|
10
|
-
import { readSettings, writeSettings } from '../settings/settings.store.js';
|
|
11
|
-
import { previewRules } from './workflow.diff.js';
|
|
12
|
-
import { deleteWorkflow, findBuiltInWorkflow, findDefaultWorkflow, findWorkflow, insertWorkflow, issueStatusCounts, listWorkflows, projectCounts, projectsOnWorkflow, setDefaultWorkflow, updateWorkflow, workflowIdOfProject, } from './workflow.store.js';
|
|
13
|
-
/**
|
|
14
|
-
* The statuses of every project while no workflow is the default (the plugin ships none): the built-in statuses,
|
|
15
|
-
* people move freely and the system closes merged work. A new workflow may start from it (`copyFrom: null`).
|
|
16
|
-
*/
|
|
17
|
-
const FALLBACK = {
|
|
18
|
-
states: BUILTIN_STATUSES,
|
|
19
|
-
transitions: [
|
|
20
|
-
{ from: ANY_STATUS, to: ANY_STATUS, actors: ['user'] },
|
|
21
|
-
{ from: ANY_STATUS, to: 'done', actors: ['system'] },
|
|
22
|
-
],
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* The ways a new issue may start: none while no status carries a `startOption` rule; otherwise the initial status
|
|
26
|
-
* first, then every status carrying one, in the workflow's order.
|
|
27
|
-
*/
|
|
28
|
-
function startsOf(definition, byKey) {
|
|
29
|
-
const offered = [];
|
|
30
|
-
for (const state of definition.states) {
|
|
31
|
-
const rule = state.rules?.find((item) => item.type === 'startOption');
|
|
32
|
-
const status = byKey.get(state.key);
|
|
33
|
-
if (!rule || !status)
|
|
34
|
-
continue;
|
|
35
|
-
const config = ('config' in rule ? (rule.config ?? {}) : {});
|
|
36
|
-
offered.push({
|
|
37
|
-
status,
|
|
38
|
-
label: ruleMessage(config.label),
|
|
39
|
-
hint: ruleMessage(config.hint),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (offered.length === 0)
|
|
43
|
-
return [];
|
|
44
|
-
const initial = offered.find((option) => option.status.key === INITIAL_STATUS);
|
|
45
|
-
const initialStatus = byKey.get(INITIAL_STATUS);
|
|
46
|
-
return [
|
|
47
|
-
initial ??
|
|
48
|
-
(initialStatus
|
|
49
|
-
? { status: initialStatus, label: null, hint: null }
|
|
50
|
-
: null),
|
|
51
|
-
...offered.filter((option) => option !== initial),
|
|
52
|
-
].filter((option) => option !== null);
|
|
53
|
-
}
|
|
54
|
-
function catalogOf(definition, rules) {
|
|
55
|
-
const statuses = definition.states.map(({ key, name, category, color }) => ({ key, name, category, color }));
|
|
56
|
-
const byKey = new Map(statuses.map((status) => [status.key, status]));
|
|
57
|
-
return {
|
|
58
|
-
statuses,
|
|
59
|
-
initialStatus: INITIAL_STATUS,
|
|
60
|
-
starts: startsOf(definition, byKey),
|
|
61
|
-
category: (key) => byKey.get(key)?.category ?? null,
|
|
62
|
-
machine: compile(definition),
|
|
63
|
-
rules,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
function requireEditor(viewer) {
|
|
67
|
-
requireSetting(viewer, 'pm.workflows', 'update', 'You may not change workflows.');
|
|
68
|
-
}
|
|
69
|
-
const nameOf = (value) => requiredText(value, 'name', WORKFLOW_NAME_MAX, 'INVALID_NAME');
|
|
70
|
-
/** Runs a write whose unique name may already be taken. */
|
|
71
|
-
async function uniquely(write) {
|
|
72
|
-
try {
|
|
73
|
-
return await write();
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
if (isUniqueViolation(error))
|
|
77
|
-
throw conflict('WORKFLOW_EXISTS', 'A workflow with this name already exists.');
|
|
78
|
-
throw error;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/** The issues of `projectIds` (and, with `loose`, those without a project) per status `keep` does not contain. */
|
|
82
|
-
async function lostStatuses(conn, projectIds, loose, keep) {
|
|
83
|
-
const counts = await issueStatusCounts(conn, projectIds, loose);
|
|
84
|
-
return counts.filter((entry) => !keep.has(entry.statusKey));
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 400 `WORKFLOW_STATUS_CONFLICT` when issues of `projectIds` (and, with `loose`, issues without a project) are in a
|
|
88
|
-
* status `keep` does not contain.
|
|
89
|
-
*/
|
|
90
|
-
async function assertStatusesKept(conn, projectIds, loose, keep, names) {
|
|
91
|
-
const conflicts = (await lostStatuses(conn, projectIds, loose, keep)).map((entry) => ({
|
|
92
|
-
...entry,
|
|
93
|
-
projectName: entry.projectId
|
|
94
|
-
? (names.get(entry.projectId) ?? null)
|
|
95
|
-
: null,
|
|
96
|
-
}));
|
|
97
|
-
if (conflicts.length === 0)
|
|
98
|
-
return;
|
|
99
|
-
const details = { conflicts };
|
|
100
|
-
throw conflict('WORKFLOW_STATUS_CONFLICT', `Issues are still in ${unique(conflicts.map((entry) => entry.statusKey)).join(', ')}; move them first.`, { ...details });
|
|
101
|
-
}
|
|
102
|
-
const keysOf = (definition) => new Set(definition.states.map((state) => state.key));
|
|
103
|
-
export function createWorkflowService(deps) {
|
|
104
|
-
const catalogs = new Map();
|
|
105
|
-
let defaultId;
|
|
106
|
-
const invalidate = () => {
|
|
107
|
-
catalogs.clear();
|
|
108
|
-
defaultId = undefined;
|
|
109
|
-
};
|
|
110
|
-
async function defaultWorkflow(conn) {
|
|
111
|
-
return findDefaultWorkflow(conn);
|
|
112
|
-
}
|
|
113
|
-
async function catalogFor(conn, id) {
|
|
114
|
-
if (id === null) {
|
|
115
|
-
if (defaultId === undefined)
|
|
116
|
-
defaultId = (await defaultWorkflow(conn))?.id ?? null;
|
|
117
|
-
if (defaultId === null)
|
|
118
|
-
return catalogOf(FALLBACK, deps.registry);
|
|
119
|
-
id = defaultId;
|
|
120
|
-
}
|
|
121
|
-
const cached = catalogs.get(id);
|
|
122
|
-
if (cached)
|
|
123
|
-
return cached;
|
|
124
|
-
const workflow = await findWorkflow(conn, id);
|
|
125
|
-
// A project pointing at a missing workflow uses the default rather than failing every request.
|
|
126
|
-
if (!workflow)
|
|
127
|
-
return id === defaultId
|
|
128
|
-
? catalogOf(FALLBACK, deps.registry)
|
|
129
|
-
: catalogFor(conn, null);
|
|
130
|
-
const catalog = catalogOf(workflow.definition, deps.registry);
|
|
131
|
-
catalogs.set(id, catalog);
|
|
132
|
-
return catalog;
|
|
133
|
-
}
|
|
134
|
-
/** The list item: its projects, and a template's translated name and description while it keeps the template's. */
|
|
135
|
-
function itemOf(workflow, counts) {
|
|
136
|
-
const template = workflow.builtInKey
|
|
137
|
-
? deps.templates?.get(workflow.builtInKey)
|
|
138
|
-
: undefined;
|
|
139
|
-
const title = template?.title &&
|
|
140
|
-
typeof template.title !== 'string' &&
|
|
141
|
-
template.name === workflow.name
|
|
142
|
-
? { title: template.title }
|
|
143
|
-
: {};
|
|
144
|
-
const description = typeof template?.description === 'object' &&
|
|
145
|
-
template.description.defaultValue === workflow.description
|
|
146
|
-
? {
|
|
147
|
-
descriptionTitle: {
|
|
148
|
-
key: template.description.key,
|
|
149
|
-
ns: template.description.ns,
|
|
150
|
-
},
|
|
151
|
-
}
|
|
152
|
-
: {};
|
|
153
|
-
return {
|
|
154
|
-
...workflow,
|
|
155
|
-
projectCount: (counts.get(workflow.id) ?? 0) +
|
|
156
|
-
(workflow.isDefault ? (counts.get(null) ?? 0) : 0),
|
|
157
|
-
...title,
|
|
158
|
-
...description,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
async function withCount(conn, workflow) {
|
|
162
|
-
return itemOf(workflow, await projectCounts(conn));
|
|
163
|
-
}
|
|
164
|
-
const INSTALLED = 'installedWorkflowTemplates';
|
|
165
|
-
async function installedTemplates(conn) {
|
|
166
|
-
const row = await readSettings(conn);
|
|
167
|
-
const raw = typeof row?.values === 'string'
|
|
168
|
-
? JSON.parse(row.values)
|
|
169
|
-
: (row?.values ?? {});
|
|
170
|
-
const values = (raw && typeof raw === 'object' ? raw : {});
|
|
171
|
-
const keys = Array.isArray(values[INSTALLED])
|
|
172
|
-
? values[INSTALLED].filter((key) => typeof key === 'string')
|
|
173
|
-
: [];
|
|
174
|
-
return { values, keys };
|
|
175
|
-
}
|
|
176
|
-
async function existing(conn, id) {
|
|
177
|
-
const workflow = await findWorkflow(conn, id);
|
|
178
|
-
if (!workflow)
|
|
179
|
-
throw notFound('Workflow');
|
|
180
|
-
return workflow;
|
|
181
|
-
}
|
|
182
|
-
/** The projects and loose issues a workflow's statuses apply to. */
|
|
183
|
-
async function usersOf(conn, workflow) {
|
|
184
|
-
const projects = [
|
|
185
|
-
...(await projectsOnWorkflow(conn, workflow.id)),
|
|
186
|
-
...(workflow.isDefault ? await projectsOnWorkflow(conn, null) : []),
|
|
187
|
-
];
|
|
188
|
-
return {
|
|
189
|
-
projectIds: projects.map((project) => project.id),
|
|
190
|
-
names: new Map(projects.map((project) => [project.id, project.name])),
|
|
191
|
-
loose: workflow.isDefault,
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
/** Writes and announces a change; the cache is dropped once it committed. */
|
|
195
|
-
async function write(fn) {
|
|
196
|
-
try {
|
|
197
|
-
return await deps.tx.run(fn);
|
|
198
|
-
}
|
|
199
|
-
finally {
|
|
200
|
-
invalidate();
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return {
|
|
204
|
-
async list() {
|
|
205
|
-
const conn = deps.tx.read();
|
|
206
|
-
const counts = await projectCounts(conn);
|
|
207
|
-
return (await listWorkflows(conn)).map((workflow) => itemOf(workflow, counts));
|
|
208
|
-
},
|
|
209
|
-
async get(_viewer, id) {
|
|
210
|
-
const conn = deps.tx.read();
|
|
211
|
-
return withCount(conn, await existing(conn, id));
|
|
212
|
-
},
|
|
213
|
-
async create(viewer, input) {
|
|
214
|
-
requireEditor(viewer);
|
|
215
|
-
const name = nameOf(input.name);
|
|
216
|
-
const copyFrom = input.copyFrom ?? null;
|
|
217
|
-
if (copyFrom !== null && typeof copyFrom !== 'string')
|
|
218
|
-
throw invalid('INVALID_FIELD', 'copyFrom names the workflow to copy, or is null for the built-in statuses.');
|
|
219
|
-
const id = deps.ids.next();
|
|
220
|
-
await uniquely(() => write(async (tx) => {
|
|
221
|
-
const source = copyFrom === null
|
|
222
|
-
? { description: null, definition: FALLBACK }
|
|
223
|
-
: await existing(tx.conn, copyFrom);
|
|
224
|
-
await insertWorkflow(tx.conn, {
|
|
225
|
-
id,
|
|
226
|
-
name,
|
|
227
|
-
description: source.description,
|
|
228
|
-
definition: source.definition,
|
|
229
|
-
});
|
|
230
|
-
tx.emit({ type: 'workflow.changed', workflowId: id });
|
|
231
|
-
}));
|
|
232
|
-
const conn = deps.tx.read();
|
|
233
|
-
return withCount(conn, await existing(conn, id));
|
|
234
|
-
},
|
|
235
|
-
async update(viewer, id, input) {
|
|
236
|
-
requireEditor(viewer);
|
|
237
|
-
if (!Number.isInteger(input.revision))
|
|
238
|
-
throw invalid('INVALID_FIELD', 'revision is required.');
|
|
239
|
-
await uniquely(() => write(async (tx) => {
|
|
240
|
-
const before = await existing(tx.conn, id);
|
|
241
|
-
const values = {
|
|
242
|
-
...(input.name === undefined ? {} : { name: nameOf(input.name) }),
|
|
243
|
-
...(input.description === undefined
|
|
244
|
-
? {}
|
|
245
|
-
: {
|
|
246
|
-
description: optionalText(input.description, 'description', 2000),
|
|
247
|
-
}),
|
|
248
|
-
};
|
|
249
|
-
if (input.definition !== undefined) {
|
|
250
|
-
const definition = checkDefinition(input.definition, before.definition, deps.registry, deps.kinds, deps.ruleTypes, deps.events);
|
|
251
|
-
const users = await usersOf(tx.conn, before);
|
|
252
|
-
await assertStatusesKept(tx.conn, users.projectIds, users.loose, keysOf(definition), users.names);
|
|
253
|
-
values.definition = definition;
|
|
254
|
-
}
|
|
255
|
-
if (!(await updateWorkflow(tx.conn, id, input.revision, values)))
|
|
256
|
-
throw conflict('REVISION_CONFLICT', 'The workflow was changed meanwhile.');
|
|
257
|
-
tx.emit({ type: 'workflow.changed', workflowId: id });
|
|
258
|
-
}));
|
|
259
|
-
const conn = deps.tx.read();
|
|
260
|
-
return withCount(conn, await existing(conn, id));
|
|
261
|
-
},
|
|
262
|
-
async remove(viewer, id) {
|
|
263
|
-
requireEditor(viewer);
|
|
264
|
-
await write(async (tx) => {
|
|
265
|
-
const workflow = await withCount(tx.conn, await existing(tx.conn, id));
|
|
266
|
-
if (workflow.isDefault)
|
|
267
|
-
throw conflict('WORKFLOW_IN_USE', 'The default workflow cannot be deleted; make another one the default first.');
|
|
268
|
-
if (workflow.projectCount > 0)
|
|
269
|
-
throw conflict('WORKFLOW_IN_USE', `${workflow.projectCount} projects use this workflow.`, { projectCount: workflow.projectCount });
|
|
270
|
-
await deleteWorkflow(tx.conn, id);
|
|
271
|
-
tx.emit({ type: 'workflow.changed', workflowId: id });
|
|
272
|
-
});
|
|
273
|
-
},
|
|
274
|
-
async setDefault(viewer, id) {
|
|
275
|
-
requireEditor(viewer);
|
|
276
|
-
await write(async (tx) => {
|
|
277
|
-
const next = await existing(tx.conn, id);
|
|
278
|
-
if (next.isDefault)
|
|
279
|
-
return;
|
|
280
|
-
const current = await defaultWorkflow(tx.conn);
|
|
281
|
-
// Projects without a workflow of their own, and issues without a project, move to the new default.
|
|
282
|
-
const projects = await projectsOnWorkflow(tx.conn, null);
|
|
283
|
-
await assertStatusesKept(tx.conn, projects.map((project) => project.id), true, keysOf(next.definition), new Map(projects.map((project) => [project.id, project.name])));
|
|
284
|
-
await setDefaultWorkflow(tx.conn, id);
|
|
285
|
-
tx.emit({ type: 'workflow.changed', workflowId: id });
|
|
286
|
-
if (current)
|
|
287
|
-
tx.emit({ type: 'workflow.changed', workflowId: current.id });
|
|
288
|
-
});
|
|
289
|
-
const conn = deps.tx.read();
|
|
290
|
-
return withCount(conn, await existing(conn, id));
|
|
291
|
-
},
|
|
292
|
-
async preview(viewer, id, input) {
|
|
293
|
-
requireEditor(viewer);
|
|
294
|
-
const conn = deps.tx.read();
|
|
295
|
-
const before = await existing(conn, id);
|
|
296
|
-
const definition = checkDefinition(input?.definition, before.definition, deps.registry, deps.kinds, deps.ruleTypes, deps.events);
|
|
297
|
-
return previewRules(before.definition, definition, deps.ruleTypes);
|
|
298
|
-
},
|
|
299
|
-
async installTemplate(template) {
|
|
300
|
-
try {
|
|
301
|
-
return await write(async (tx) => {
|
|
302
|
-
const { values, keys } = await installedTemplates(tx.conn);
|
|
303
|
-
if (keys.includes(template.key))
|
|
304
|
-
return false;
|
|
305
|
-
let created = false;
|
|
306
|
-
if (!(await findBuiltInWorkflow(tx.conn, template.key))) {
|
|
307
|
-
const definition = checkDefinition(template.definition, null, deps.registry, deps.kinds, deps.ruleTypes, deps.events);
|
|
308
|
-
const taken = (await listWorkflows(tx.conn)).some((workflow) => workflow.name === template.name);
|
|
309
|
-
const id = deps.ids.next();
|
|
310
|
-
await insertWorkflow(tx.conn, {
|
|
311
|
-
id,
|
|
312
|
-
name: taken
|
|
313
|
-
? `${template.name} (${template.key})`
|
|
314
|
-
: template.name,
|
|
315
|
-
description: typeof template.description === 'object'
|
|
316
|
-
? template.description.defaultValue
|
|
317
|
-
: (template.description ?? null),
|
|
318
|
-
definition,
|
|
319
|
-
builtInKey: template.key,
|
|
320
|
-
});
|
|
321
|
-
tx.emit({ type: 'workflow.changed', workflowId: id });
|
|
322
|
-
created = true;
|
|
323
|
-
// The first default: projects without a workflow of their own leave the built-in statuses for it,
|
|
324
|
-
// unless some issue is in a status it lacks.
|
|
325
|
-
if (template.makeDefault &&
|
|
326
|
-
!(await defaultWorkflow(tx.conn)) &&
|
|
327
|
-
(await lostStatuses(tx.conn, (await projectsOnWorkflow(tx.conn, null)).map((project) => project.id), true, keysOf(definition))).length === 0)
|
|
328
|
-
await setDefaultWorkflow(tx.conn, id);
|
|
329
|
-
}
|
|
330
|
-
await writeSettings(tx.conn, {
|
|
331
|
-
values: { ...values, [INSTALLED]: [...keys, template.key] },
|
|
332
|
-
});
|
|
333
|
-
return created;
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
// Another instance installed it at the same moment.
|
|
338
|
-
if (isUniqueViolation(error))
|
|
339
|
-
return false;
|
|
340
|
-
throw error;
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
catalogs: {
|
|
344
|
-
async forProject(conn, projectId) {
|
|
345
|
-
if (projectId === null)
|
|
346
|
-
return catalogFor(conn, null);
|
|
347
|
-
return catalogFor(conn, (await workflowIdOfProject(conn, projectId)) ?? null);
|
|
348
|
-
},
|
|
349
|
-
},
|
|
350
|
-
projects: {
|
|
351
|
-
async requireExisting(conn, id) {
|
|
352
|
-
if (!(await findWorkflow(conn, id)))
|
|
353
|
-
throw invalid('INVALID_WORKFLOW', 'workflowId names no workflow.');
|
|
354
|
-
},
|
|
355
|
-
async assertCompatible(conn, projectId, workflowId) {
|
|
356
|
-
const catalog = await catalogFor(conn, workflowId);
|
|
357
|
-
await assertStatusesKept(conn, [projectId], false, new Set(catalog.statuses.map((status) => status.key)), new Map());
|
|
358
|
-
},
|
|
359
|
-
switched(tx, workflowId) {
|
|
360
|
-
tx.emit({ type: 'workflow.changed', workflowId });
|
|
361
|
-
},
|
|
362
|
-
},
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
//# sourceMappingURL=workflow.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.service.js","sourceRoot":"","sources":["../../../../server/domains/workflows/workflow.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `pmWorkflows`, and the reads across projects and issues that changing a workflow needs.
|
|
3
|
-
*/
|
|
4
|
-
import { type DatabaseConnection } from '@nocobase/db';
|
|
5
|
-
import type { Workflow } from '../../../shared/workflows.js';
|
|
6
|
-
export declare const WORKFLOWS = "pmWorkflows";
|
|
7
|
-
export declare function listWorkflows(conn: DatabaseConnection): Promise<Workflow[]>;
|
|
8
|
-
export declare function findWorkflow(conn: DatabaseConnection, id: string): Promise<Workflow | undefined>;
|
|
9
|
-
export declare function findDefaultWorkflow(conn: DatabaseConnection): Promise<Workflow | undefined>;
|
|
10
|
-
export declare function findBuiltInWorkflow(conn: DatabaseConnection, builtInKey: string): Promise<Workflow | undefined>;
|
|
11
|
-
export declare function insertWorkflow(conn: DatabaseConnection, workflow: Pick<Workflow, 'id' | 'name' | 'description' | 'definition'> & {
|
|
12
|
-
readonly builtInKey?: string;
|
|
13
|
-
}): Promise<void>;
|
|
14
|
-
/** Writes when the row is still at `revision` (the revision then moves on); false when it moved meanwhile. */
|
|
15
|
-
export declare function updateWorkflow(conn: DatabaseConnection, id: string, revision: number, values: Partial<Pick<Workflow, 'name' | 'description' | 'definition'>>): Promise<boolean>;
|
|
16
|
-
export declare function setDefaultWorkflow(conn: DatabaseConnection, id: string): Promise<void>;
|
|
17
|
-
export declare function deleteWorkflow(conn: DatabaseConnection, id: string): Promise<void>;
|
|
18
|
-
/** The workflow a project chose; null for the default, undefined when the project does not exist. */
|
|
19
|
-
export declare function workflowIdOfProject(conn: DatabaseConnection, projectId: string): Promise<string | null | undefined>;
|
|
20
|
-
/** Projects per workflow id; the key null counts projects on the default. */
|
|
21
|
-
export declare function projectCounts(conn: DatabaseConnection): Promise<Map<string | null, number>>;
|
|
22
|
-
/** The projects on a workflow (`null`: on the default, choosing none), with their names. */
|
|
23
|
-
export declare function projectsOnWorkflow(conn: DatabaseConnection, workflowId: string | null): Promise<{
|
|
24
|
-
id: string;
|
|
25
|
-
name: string;
|
|
26
|
-
}[]>;
|
|
27
|
-
/** Issues (not deleted) per project and status, among `projectIds`; `includeLoose` adds issues without a project. */
|
|
28
|
-
export declare function issueStatusCounts(conn: DatabaseConnection, projectIds: readonly string[], includeLoose: boolean): Promise<{
|
|
29
|
-
projectId: string | null;
|
|
30
|
-
statusKey: string;
|
|
31
|
-
count: number;
|
|
32
|
-
}[]>;
|
|
33
|
-
//# sourceMappingURL=workflow.store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.store.d.ts","sourceRoot":"","sources":["../../../../server/domains/workflows/workflow.store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,KAAK,EACV,QAAQ,EAET,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,SAAS,gBAAgB,CAAC;AAuCvC,wBAAsB,aAAa,CACjC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAKrB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAG/B;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAO/B;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAG/B;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC,GAAG;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,8GAA8G;AAC9G,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GACrE,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,qGAAqG;AACrG,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAQpC;AAED,6EAA6E;AAC7E,wBAAsB,aAAa,CACjC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAerC;AAED,4FAA4F;AAC5F,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CASzC;AAED,qHAAqH;AACrH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA4B3E"}
|