@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.
Files changed (474) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +56 -102
  3. package/dist/client/api/client.d.ts +4 -23
  4. package/dist/client/api/client.d.ts.map +1 -1
  5. package/dist/client/api/client.js +4 -48
  6. package/dist/client/api/client.js.map +1 -1
  7. package/dist/client/api/keys.d.ts +2 -8
  8. package/dist/client/api/keys.d.ts.map +1 -1
  9. package/dist/client/api/keys.js +2 -17
  10. package/dist/client/api/keys.js.map +1 -1
  11. package/dist/client/components/pm-badges.d.ts +1 -1
  12. package/dist/client/components/pm-badges.d.ts.map +1 -1
  13. package/dist/client/components/pm-executor-select.d.ts +2 -0
  14. package/dist/client/components/pm-executor-select.d.ts.map +1 -1
  15. package/dist/client/components/pm-executor-select.js.map +1 -1
  16. package/dist/client/components/ui/radio-group.d.ts +7 -0
  17. package/dist/client/components/ui/radio-group.d.ts.map +1 -0
  18. package/dist/client/components/ui/radio-group.js +12 -0
  19. package/dist/client/components/ui/radio-group.js.map +1 -0
  20. package/dist/client/config.d.ts +0 -2
  21. package/dist/client/config.d.ts.map +1 -1
  22. package/dist/client/config.js +1 -5
  23. package/dist/client/config.js.map +1 -1
  24. package/dist/client/issues.d.ts +2 -4
  25. package/dist/client/issues.d.ts.map +1 -1
  26. package/dist/client/issues.js +2 -3
  27. package/dist/client/issues.js.map +1 -1
  28. package/dist/client/kit/plans/lookup.d.ts +2 -2
  29. package/dist/client/kit/plans/lookup.js +3 -3
  30. package/dist/client/kit/plans/lookup.js.map +1 -1
  31. package/dist/client/kit/plans/plan-row.js +2 -2
  32. package/dist/client/kit/plans/plan-row.js.map +1 -1
  33. package/dist/client/kit.d.ts +2 -9
  34. package/dist/client/kit.d.ts.map +1 -1
  35. package/dist/client/kit.js +2 -9
  36. package/dist/client/kit.js.map +1 -1
  37. package/dist/client/lib/kinds.d.ts +3 -29
  38. package/dist/client/lib/kinds.d.ts.map +1 -1
  39. package/dist/client/lib/kinds.js +7 -46
  40. package/dist/client/lib/kinds.js.map +1 -1
  41. package/dist/client/lib/status-events.d.ts +21 -0
  42. package/dist/client/lib/status-events.d.ts.map +1 -0
  43. package/dist/client/lib/status-events.js +31 -0
  44. package/dist/client/lib/status-events.js.map +1 -0
  45. package/dist/client/lib/status.d.ts +5 -7
  46. package/dist/client/lib/status.d.ts.map +1 -1
  47. package/dist/client/lib/status.js +5 -7
  48. package/dist/client/lib/status.js.map +1 -1
  49. package/dist/client/locales/en-US.d.ts +7 -252
  50. package/dist/client/locales/en-US.d.ts.map +1 -1
  51. package/dist/client/locales/en-US.js +10 -251
  52. package/dist/client/locales/en-US.js.map +1 -1
  53. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  54. package/dist/client/locales/zh-CN.js +11 -244
  55. package/dist/client/locales/zh-CN.js.map +1 -1
  56. package/dist/client/pages/issues/board/board-model.d.ts +1 -1
  57. package/dist/client/pages/issues/board/board-model.js +1 -1
  58. package/dist/client/pages/issues/board/use-board-move.d.ts +2 -8
  59. package/dist/client/pages/issues/board/use-board-move.d.ts.map +1 -1
  60. package/dist/client/pages/issues/board/use-board-move.js +5 -42
  61. package/dist/client/pages/issues/board/use-board-move.js.map +1 -1
  62. package/dist/client/pages/issues/detail/new-subtask.d.ts.map +1 -1
  63. package/dist/client/pages/issues/detail/new-subtask.js +6 -28
  64. package/dist/client/pages/issues/detail/new-subtask.js.map +1 -1
  65. package/dist/client/pages/issues/detail/subtask-model.d.ts +1 -1
  66. package/dist/client/pages/issues/detail/subtask-model.js +1 -1
  67. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts +6 -8
  68. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts.map +1 -1
  69. package/dist/client/pages/issues/detail/use-confirmed-update.js +9 -42
  70. package/dist/client/pages/issues/detail/use-confirmed-update.js.map +1 -1
  71. package/dist/client/pages/issues/detail/use-issue-page.d.ts +0 -4
  72. package/dist/client/pages/issues/detail/use-issue-page.d.ts.map +1 -1
  73. package/dist/client/pages/issues/detail/use-issue-page.js +0 -14
  74. package/dist/client/pages/issues/detail/use-issue-page.js.map +1 -1
  75. package/dist/client/pages/issues/detail/use-issue-update.d.ts +2 -2
  76. package/dist/client/pages/issues/detail/use-issue-update.d.ts.map +1 -1
  77. package/dist/client/pages/issues/detail/use-issue-update.js +4 -6
  78. package/dist/client/pages/issues/detail/use-issue-update.js.map +1 -1
  79. package/dist/client/pages/issues/new-issue-form.d.ts +11 -8
  80. package/dist/client/pages/issues/new-issue-form.d.ts.map +1 -1
  81. package/dist/client/pages/issues/new-issue-form.js +47 -79
  82. package/dist/client/pages/issues/new-issue-form.js.map +1 -1
  83. package/dist/client/pages/issues/new.d.ts.map +1 -1
  84. package/dist/client/pages/issues/new.js +2 -1
  85. package/dist/client/pages/issues/new.js.map +1 -1
  86. package/dist/client/pages/issues/use-executor-options.d.ts +3 -2
  87. package/dist/client/pages/issues/use-executor-options.d.ts.map +1 -1
  88. package/dist/client/pages/issues/use-executor-options.js +5 -23
  89. package/dist/client/pages/issues/use-executor-options.js.map +1 -1
  90. package/dist/client/pages/projects/detail/use-project-page.d.ts +4 -26
  91. package/dist/client/pages/projects/detail/use-project-page.d.ts.map +1 -1
  92. package/dist/client/pages/projects/detail/use-project-page.js +7 -53
  93. package/dist/client/pages/projects/detail/use-project-page.js.map +1 -1
  94. package/dist/client/pages/projects/new.d.ts +1 -1
  95. package/dist/client/pages/projects/new.d.ts.map +1 -1
  96. package/dist/client/pages/projects/new.js +3 -7
  97. package/dist/client/pages/projects/new.js.map +1 -1
  98. package/dist/client/plugin.d.ts +3 -0
  99. package/dist/client/plugin.d.ts.map +1 -1
  100. package/dist/client/plugin.js +8 -1
  101. package/dist/client/plugin.js.map +1 -1
  102. package/dist/client/projects.d.ts +2 -2
  103. package/dist/client/projects.d.ts.map +1 -1
  104. package/dist/client/projects.js +2 -2
  105. package/dist/client/projects.js.map +1 -1
  106. package/dist/client/providers/query-provider.d.ts.map +1 -1
  107. package/dist/client/providers/query-provider.js +0 -4
  108. package/dist/client/providers/query-provider.js.map +1 -1
  109. package/dist/database/migrations/.manifest.json +4 -0
  110. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts +4 -0
  111. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts.map +1 -0
  112. package/dist/database/migrations/202610240010_pm_fixed_statuses.js +189 -0
  113. package/dist/database/migrations/202610240010_pm_fixed_statuses.js.map +1 -0
  114. package/dist/server/composition.d.ts +11 -17
  115. package/dist/server/composition.d.ts.map +1 -1
  116. package/dist/server/composition.js +11 -56
  117. package/dist/server/composition.js.map +1 -1
  118. package/dist/server/domains/comments/comment.queries.d.ts +10 -7
  119. package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
  120. package/dist/server/domains/comments/comment.queries.js +10 -3
  121. package/dist/server/domains/comments/comment.queries.js.map +1 -1
  122. package/dist/server/domains/comments/comment.routes.d.ts +1 -1
  123. package/dist/server/domains/comments/comment.routes.js +4 -4
  124. package/dist/server/domains/comments/comment.routes.js.map +1 -1
  125. package/dist/server/domains/comments/comment.service.d.ts +2 -2
  126. package/dist/server/domains/comments/comment.service.d.ts.map +1 -1
  127. package/dist/server/domains/comments/comment.service.js +6 -3
  128. package/dist/server/domains/comments/comment.service.js.map +1 -1
  129. package/dist/server/domains/comments/comment.store.d.ts +3 -1
  130. package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
  131. package/dist/server/domains/comments/comment.store.js +10 -2
  132. package/dist/server/domains/comments/comment.store.js.map +1 -1
  133. package/dist/server/domains/comments/ports.d.ts +7 -2
  134. package/dist/server/domains/comments/ports.d.ts.map +1 -1
  135. package/dist/server/domains/issues/index.d.ts +1 -1
  136. package/dist/server/domains/issues/index.d.ts.map +1 -1
  137. package/dist/server/domains/issues/index.js +1 -1
  138. package/dist/server/domains/issues/index.js.map +1 -1
  139. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  140. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  141. package/dist/server/domains/issues/issue.context.js +1 -22
  142. package/dist/server/domains/issues/issue.context.js.map +1 -1
  143. package/dist/server/domains/issues/issue.fields.d.ts +3 -3
  144. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  145. package/dist/server/domains/issues/issue.fields.js +12 -15
  146. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  147. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  148. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  149. package/dist/server/domains/issues/issue.projects.js +1 -2
  150. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  151. package/dist/server/domains/issues/issue.queries.d.ts +5 -7
  152. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  153. package/dist/server/domains/issues/issue.queries.js +12 -41
  154. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  155. package/dist/server/domains/issues/issue.routes.d.ts +1 -1
  156. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  157. package/dist/server/domains/issues/issue.routes.js +17 -37
  158. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  159. package/dist/server/domains/issues/issue.service.d.ts +20 -44
  160. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  161. package/dist/server/domains/issues/issue.service.js +19 -80
  162. package/dist/server/domains/issues/issue.service.js.map +1 -1
  163. package/dist/server/domains/issues/issue.status.d.ts +6 -10
  164. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  165. package/dist/server/domains/issues/issue.status.js +3 -20
  166. package/dist/server/domains/issues/issue.status.js.map +1 -1
  167. package/dist/server/domains/issues/ports.d.ts +24 -34
  168. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  169. package/dist/server/domains/issues/ports.js +0 -5
  170. package/dist/server/domains/issues/ports.js.map +1 -1
  171. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  172. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  173. package/dist/server/domains/notices/notice.planner.js +2 -1
  174. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  175. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  176. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  177. package/dist/server/domains/notices/notice.rules.js +4 -5
  178. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  179. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  180. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  181. package/dist/server/domains/plans/plan.ops.js +7 -10
  182. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  183. package/dist/server/domains/projects/index.d.ts +1 -1
  184. package/dist/server/domains/projects/index.d.ts.map +1 -1
  185. package/dist/server/domains/projects/index.js.map +1 -1
  186. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  187. package/dist/server/domains/projects/project.routes.js +1 -3
  188. package/dist/server/domains/projects/project.routes.js.map +1 -1
  189. package/dist/server/domains/projects/project.service.d.ts +0 -7
  190. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  191. package/dist/server/domains/projects/project.service.js +0 -17
  192. package/dist/server/domains/projects/project.service.js.map +1 -1
  193. package/dist/server/domains/projects/project.store.d.ts +0 -1
  194. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  195. package/dist/server/domains/projects/project.store.js +0 -1
  196. package/dist/server/domains/projects/project.store.js.map +1 -1
  197. package/dist/server/domains/reports/report.service.d.ts +1 -12
  198. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  199. package/dist/server/domains/reports/report.service.js +23 -79
  200. package/dist/server/domains/reports/report.service.js.map +1 -1
  201. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  202. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  203. package/dist/server/domains/statuses/event-types.js +31 -0
  204. package/dist/server/domains/statuses/event-types.js.map +1 -0
  205. package/dist/server/domains/statuses/index.d.ts +4 -0
  206. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  207. package/dist/server/domains/statuses/index.js +4 -0
  208. package/dist/server/domains/statuses/index.js.map +1 -0
  209. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  210. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  211. package/dist/server/domains/statuses/status.catalog.js +119 -0
  212. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  213. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  214. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  215. package/dist/server/domains/statuses/status.events.js +2 -0
  216. package/dist/server/domains/statuses/status.events.js.map +1 -0
  217. package/dist/server/domains/statuses/status.fire.d.ts +48 -0
  218. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  219. package/dist/server/domains/statuses/status.fire.js +38 -0
  220. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  221. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  222. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  223. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  224. package/dist/server/domains/subtasks/subtask.blocking.d.ts +4 -4
  225. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  226. package/dist/server/domains/subtasks/subtask.blocking.js +2 -10
  227. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  228. package/dist/server/domains/subtasks/subtask.release.d.ts +5 -9
  229. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  230. package/dist/server/domains/subtasks/subtask.release.js +0 -4
  231. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  232. package/dist/server/domains/subtasks/subtask.service.d.ts +1 -3
  233. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  234. package/dist/server/domains/subtasks/subtask.service.js +0 -12
  235. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  236. package/dist/server/kernel/http.d.ts.map +1 -1
  237. package/dist/server/kernel/http.js +0 -3
  238. package/dist/server/kernel/http.js.map +1 -1
  239. package/dist/server/kernel/kinds.d.ts +24 -6
  240. package/dist/server/kernel/kinds.d.ts.map +1 -1
  241. package/dist/server/kernel/kinds.js +21 -1
  242. package/dist/server/kernel/kinds.js.map +1 -1
  243. package/dist/server/kernel/work.d.ts +12 -6
  244. package/dist/server/kernel/work.d.ts.map +1 -1
  245. package/dist/server/kernel/work.js +33 -15
  246. package/dist/server/kernel/work.js.map +1 -1
  247. package/dist/server/locales/en-US.d.ts +0 -9
  248. package/dist/server/locales/en-US.d.ts.map +1 -1
  249. package/dist/server/locales/en-US.js +0 -9
  250. package/dist/server/locales/en-US.js.map +1 -1
  251. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  252. package/dist/server/locales/zh-CN.js +2 -11
  253. package/dist/server/locales/zh-CN.js.map +1 -1
  254. package/dist/server/providers/notifications.d.ts +1 -0
  255. package/dist/server/providers/notifications.d.ts.map +1 -1
  256. package/dist/server/providers/notifications.js +6 -120
  257. package/dist/server/providers/notifications.js.map +1 -1
  258. package/dist/server/providers/projects.d.ts +3 -8
  259. package/dist/server/providers/projects.d.ts.map +1 -1
  260. package/dist/server/providers/projects.js +8 -27
  261. package/dist/server/providers/projects.js.map +1 -1
  262. package/dist/server/routes/api.d.ts.map +1 -1
  263. package/dist/server/routes/api.js +0 -6
  264. package/dist/server/routes/api.js.map +1 -1
  265. package/dist/server/routes/schemas.d.ts +5 -27
  266. package/dist/server/routes/schemas.d.ts.map +1 -1
  267. package/dist/server/routes/schemas.js +19 -163
  268. package/dist/server/routes/schemas.js.map +1 -1
  269. package/dist/server/tokens.d.ts +12 -34
  270. package/dist/server/tokens.d.ts.map +1 -1
  271. package/dist/server/tokens.js +4 -16
  272. package/dist/server/tokens.js.map +1 -1
  273. package/dist/shared/access.d.ts +0 -1
  274. package/dist/shared/access.d.ts.map +1 -1
  275. package/dist/shared/access.js +2 -11
  276. package/dist/shared/access.js.map +1 -1
  277. package/dist/shared/issues.d.ts +5 -36
  278. package/dist/shared/issues.d.ts.map +1 -1
  279. package/dist/shared/issues.js.map +1 -1
  280. package/dist/shared/kinds.d.ts +3 -1
  281. package/dist/shared/kinds.d.ts.map +1 -1
  282. package/dist/shared/kinds.js +1 -1
  283. package/dist/shared/locales/access.en-US.d.ts +0 -1
  284. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  285. package/dist/shared/locales/access.en-US.js +1 -2
  286. package/dist/shared/locales/access.en-US.js.map +1 -1
  287. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  288. package/dist/shared/locales/access.zh-CN.js +1 -2
  289. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  290. package/dist/shared/plans.d.ts +4 -6
  291. package/dist/shared/plans.d.ts.map +1 -1
  292. package/dist/shared/plans.js +2 -1
  293. package/dist/shared/plans.js.map +1 -1
  294. package/dist/shared/projects.d.ts +0 -4
  295. package/dist/shared/projects.d.ts.map +1 -1
  296. package/dist/shared/projects.js.map +1 -1
  297. package/dist/shared/realtime.d.ts +1 -1
  298. package/dist/shared/realtime.d.ts.map +1 -1
  299. package/dist/shared/statuses.d.ts +42 -0
  300. package/dist/shared/statuses.d.ts.map +1 -0
  301. package/dist/shared/statuses.js +73 -0
  302. package/dist/shared/statuses.js.map +1 -0
  303. package/dist/shared/subtasks.d.ts +3 -3
  304. package/dist/shared/subtasks.d.ts.map +1 -1
  305. package/package.json +11 -19
  306. package/skills/nocobase-app-plugin-projects/SKILL.md +26 -50
  307. package/dist/client/hooks/use-workflow-leave-guard.d.ts +0 -3
  308. package/dist/client/hooks/use-workflow-leave-guard.d.ts.map +0 -1
  309. package/dist/client/hooks/use-workflow-leave-guard.js +0 -31
  310. package/dist/client/hooks/use-workflow-leave-guard.js.map +0 -1
  311. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  312. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  313. package/dist/client/lib/built-in-rule-editors.js +0 -86
  314. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  315. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  316. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  317. package/dist/client/lib/built-in-rule-types.js +0 -63
  318. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  319. package/dist/client/lib/status-rule-types.d.ts +0 -60
  320. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  321. package/dist/client/lib/status-rule-types.js +0 -38
  322. package/dist/client/lib/status-rule-types.js.map +0 -1
  323. package/dist/client/lib/workflow-events.d.ts +0 -25
  324. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  325. package/dist/client/lib/workflow-events.js +0 -30
  326. package/dist/client/lib/workflow-events.js.map +0 -1
  327. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  328. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  329. package/dist/client/pages/config/workflow-detail.js +0 -188
  330. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  331. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  332. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  333. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  334. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  335. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  336. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  337. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  338. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  339. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  340. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  341. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  342. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  343. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  344. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  345. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  346. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  347. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  348. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  349. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  350. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  351. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  352. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  353. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  354. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  355. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  356. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  357. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  358. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  359. package/dist/client/pages/config/workflows.d.ts +0 -8
  360. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  361. package/dist/client/pages/config/workflows.js +0 -139
  362. package/dist/client/pages/config/workflows.js.map +0 -1
  363. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  364. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  365. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  366. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  367. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  368. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  369. package/dist/client/pages/projects/workflow-select.js +0 -34
  370. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  371. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  372. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  373. package/dist/server/domains/approvals/approval.events.js +0 -2
  374. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  375. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  376. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  377. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  378. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  379. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  380. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  381. package/dist/server/domains/approvals/approval.routes.js +0 -87
  382. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  383. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  384. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  385. package/dist/server/domains/approvals/approval.service.js +0 -261
  386. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  387. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  388. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  389. package/dist/server/domains/approvals/approval.store.js +0 -66
  390. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  391. package/dist/server/domains/approvals/index.d.ts +0 -4
  392. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  393. package/dist/server/domains/approvals/index.js +0 -3
  394. package/dist/server/domains/approvals/index.js.map +0 -1
  395. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  396. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  397. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  398. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  399. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  400. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  401. package/dist/server/domains/checklists/checklist.service.js +0 -80
  402. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  403. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  404. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  405. package/dist/server/domains/checklists/checklist.store.js +0 -66
  406. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  407. package/dist/server/domains/checklists/index.d.ts +0 -4
  408. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  409. package/dist/server/domains/checklists/index.js +0 -4
  410. package/dist/server/domains/checklists/index.js.map +0 -1
  411. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  412. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  413. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  414. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  415. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  416. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  417. package/dist/server/domains/workflows/event-types.js +0 -31
  418. package/dist/server/domains/workflows/event-types.js.map +0 -1
  419. package/dist/server/domains/workflows/index.d.ts +0 -10
  420. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  421. package/dist/server/domains/workflows/index.js +0 -10
  422. package/dist/server/domains/workflows/index.js.map +0 -1
  423. package/dist/server/domains/workflows/rule-types.d.ts +0 -129
  424. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  425. package/dist/server/domains/workflows/rule-types.js +0 -33
  426. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  427. package/dist/server/domains/workflows/templates.d.ts +0 -62
  428. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  429. package/dist/server/domains/workflows/templates.js +0 -63
  430. package/dist/server/domains/workflows/templates.js.map +0 -1
  431. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  432. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  433. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  434. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  435. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  436. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  437. package/dist/server/domains/workflows/workflow.events.js +0 -2
  438. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  439. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  440. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  441. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  442. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  443. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  444. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  445. package/dist/server/domains/workflows/workflow.registry.js +0 -132
  446. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  447. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  448. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  449. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  450. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  451. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  452. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  453. package/dist/server/domains/workflows/workflow.rules.js +0 -190
  454. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  455. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  456. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  457. package/dist/server/domains/workflows/workflow.service.js +0 -365
  458. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  459. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  460. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  461. package/dist/server/domains/workflows/workflow.store.js +0 -148
  462. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  463. package/dist/shared/approvals.d.ts +0 -37
  464. package/dist/shared/approvals.d.ts.map +0 -1
  465. package/dist/shared/approvals.js +0 -4
  466. package/dist/shared/approvals.js.map +0 -1
  467. package/dist/shared/checklists.d.ts +0 -27
  468. package/dist/shared/checklists.d.ts.map +0 -1
  469. package/dist/shared/checklists.js +0 -7
  470. package/dist/shared/checklists.js.map +0 -1
  471. package/dist/shared/workflows.d.ts +0 -267
  472. package/dist/shared/workflows.d.ts.map +0 -1
  473. package/dist/shared/workflows.js +0 -149
  474. package/dist/shared/workflows.js.map +0 -1
@@ -1,62 +0,0 @@
1
- import { apiErrorResponse, apiErrorResponses, apiValidator, cliRoute, dataResponse, describeRoute, listResponse, } from '@nocobase/app-server/router';
2
- import { viewerOf } from '../../access/request.js';
3
- import { boundedList, domainRouter, tags } from '../../kernel/http.js';
4
- import { BoundedListMeta, ChecklistItemParams, IssueChecklistSchema, IssueParams, UpdateChecklistItemBody, } from '../../routes/schemas.js';
5
- /**
6
- * Under `/api/projects/issues`: `GET /{issueId}/checklists` (every checklist the issue has had) and
7
- * `PATCH /{issueId}/checklists/{statusKey}/items/{itemKey} { checked }` (the checklist after the change).
8
- */
9
- export function createChecklistRoutes(checklists) {
10
- const routes = domainRouter();
11
- routes.get('/:issueId/checklists', describeRoute({
12
- tags,
13
- summary: 'List an issue’s checklists',
14
- operationId: 'projectsListIssueChecklists',
15
- ...cliRoute({
16
- command: 'issue checklist list',
17
- flags: { issueId: { name: 'issue' } },
18
- columns: ['statusKey', 'current', 'complete', 'items.length'],
19
- action: 'pm.issues/view',
20
- }),
21
- description: 'Every checklist the issue has had, one per status, the current status’s first. `issueId` is an id or an identifier.',
22
- responses: {
23
- 200: listResponse(IssueChecklistSchema, BoundedListMeta),
24
- ...apiErrorResponses,
25
- 404: apiErrorResponse(404),
26
- },
27
- }), apiValidator('param', IssueParams), async (context) => context.json(boundedList(await checklists.list(viewerOf(context), context.req.valid('param').issueId))));
28
- routes.patch('/:issueId/checklists/:statusKey/items/:itemKey', describeRoute({
29
- tags,
30
- summary: 'Check or uncheck a checklist item',
31
- operationId: 'projectsUpdateChecklistItem',
32
- ...cliRoute({
33
- command: 'issue checklist mark',
34
- flags: {
35
- issueId: { name: 'issue' },
36
- statusKey: { name: 'status' },
37
- itemKey: { name: 'item' },
38
- checked: {
39
- description: '`--checked` ticks the item, `--no-checked` clears it.',
40
- },
41
- },
42
- action: 'pm.issues/edit',
43
- examples: [
44
- 'issue checklist mark PM-12 in_review tests-pass --checked',
45
- 'issue checklist mark PM-12 in_review tests-pass --no-checked',
46
- ],
47
- }),
48
- description: 'Needs `edit` on the issue. Answers the checklist after the change.',
49
- responses: {
50
- 200: dataResponse(IssueChecklistSchema),
51
- ...apiErrorResponses,
52
- 404: apiErrorResponse(404),
53
- },
54
- }), apiValidator('param', ChecklistItemParams), apiValidator('json', UpdateChecklistItemBody), async (context) => {
55
- const { issueId, statusKey, itemKey } = context.req.valid('param');
56
- return context.json({
57
- data: await checklists.set(viewerOf(context), issueId, statusKey, itemKey, context.req.valid('json')),
58
- });
59
- });
60
- return routes;
61
- }
62
- //# sourceMappingURL=checklist.routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checklist.routes.js","sourceRoot":"","sources":["../../../../server/domains/checklists/checklist.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAkB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAA4B;IAE5B,MAAM,MAAM,GAAG,YAAY,EAAa,CAAC;IACzC,MAAM,CAAC,GAAG,CACR,sBAAsB,EACtB,aAAa,CAAC;QACZ,IAAI;QACJ,OAAO,EAAE,4BAA4B;QACrC,WAAW,EAAE,6BAA6B;QAC1C,GAAG,QAAQ,CAAC;YACV,OAAO,EAAE,sBAAsB;YAC/B,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACrC,OAAO,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;YAC7D,MAAM,EAAE,gBAAgB;SACzB,CAAC;QACF,WAAW,EACT,qHAAqH;QACvH,SAAS,EAAE;YACT,GAAG,EAAE,YAAY,CAAC,oBAAoB,EAAE,eAAe,CAAC;YACxD,GAAG,iBAAiB;YACpB,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;SAC3B;KACF,CAAC,EACF,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,EAClC,KAAK,EAAE,OAAO,EAAE,EAAE,CAChB,OAAO,CAAC,IAAI,CACV,WAAW,CACT,MAAM,UAAU,CAAC,IAAI,CACnB,QAAQ,CAAC,OAAO,CAAC,EACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CACnC,CACF,CACF,CACJ,CAAC;IACF,MAAM,CAAC,KAAK,CACV,gDAAgD,EAChD,aAAa,CAAC;QACZ,IAAI;QACJ,OAAO,EAAE,mCAAmC;QAC5C,WAAW,EAAE,6BAA6B;QAC1C,GAAG,QAAQ,CAAC;YACV,OAAO,EAAE,sBAAsB;YAC/B,KAAK,EAAE;gBACL,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACzB,OAAO,EAAE;oBACP,WAAW,EACT,uDAAuD;iBAC1D;aACF;YACD,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE;gBACR,2DAA2D;gBAC3D,8DAA8D;aAC/D;SACF,CAAC;QACF,WAAW,EACT,oEAAoE;QACtE,SAAS,EAAE;YACT,GAAG,EAAE,YAAY,CAAC,oBAAoB,CAAC;YACvC,GAAG,iBAAiB;YACpB,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;SAC3B;KACF,CAAC,EACF,YAAY,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAC1C,YAAY,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAC7C,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,MAAM,UAAU,CAAC,GAAG,CACxB,QAAQ,CAAC,OAAO,CAAC,EACjB,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAC1B;SACF,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Issue checklists. The workflow's `checklist` rule (`domains/workflows/workflow.registry.ts`) copies a status's items
3
- * to an issue when it enters the status, and refuses to let it leave (except to a closed status) while required items
4
- * are unchecked. Here people see the copies and check them: anyone who may see and edit the issue. Each change is an
5
- * activity (`checklist_item_checked` / `_unchecked`).
6
- */
7
- import type { DatabaseConnection } from '@nocobase/db';
8
- import type { IssueChecklist, UpdateChecklistItemRequest } from '../../../shared/checklists.js';
9
- import type { Issue } from '../../../shared/issues.js';
10
- import type { Viewer } from '../../access/viewer.js';
11
- import type { ActivityRecorder } from '../../kernel/activity.js';
12
- import type { TxRunner } from '../../kernel/tx.js';
13
- import type { KindRegistry } from '../../kernel/kinds.js';
14
- export interface ChecklistService {
15
- /** Every checklist the issue has had, the current status's first. */
16
- list(viewer: Viewer, idOrKey: string): Promise<IssueChecklist[]>;
17
- set(viewer: Viewer, idOrKey: string, statusKey: string, itemKey: string, input: UpdateChecklistItemRequest): Promise<IssueChecklist>;
18
- /** The checklist of the issue's current status, or null; for the issue page. */
19
- current(conn: DatabaseConnection, issue: Pick<Issue, 'id' | 'statusKey'>): Promise<IssueChecklist | null>;
20
- }
21
- export declare function createChecklistService(deps: {
22
- readonly tx: TxRunner;
23
- readonly kinds: KindRegistry;
24
- readonly activity: ActivityRecorder;
25
- }): ChecklistService;
26
- //# sourceMappingURL=checklist.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checklist.service.d.ts","sourceRoot":"","sources":["../../../../server/domains/checklists/checklist.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAEV,cAAc,EACd,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQ1D,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACjE,GAAG,CACD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,gFAAgF;IAChF,OAAO,CACL,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,GACrC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACnC;AAKD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC,GAAG,gBAAgB,CAyFnB"}
@@ -1,80 +0,0 @@
1
- import { invalid, notFound } from '../../kernel/errors.js';
2
- import { requireEditor, requireVisible } from '../issues/issue.access.js';
3
- import { findItems, setChecked, } from './checklist.store.js';
4
- const iso = (value) => value instanceof Date ? value.toISOString() : new Date(value).toISOString();
5
- export function createChecklistService(deps) {
6
- async function checklists(conn, issue, statusKey) {
7
- const rows = await findItems(conn, issue.id, statusKey);
8
- const name = await deps.kinds.nameAll(conn, rows.map((row) => ({ type: row.checkedByType, id: row.checkedById })));
9
- const item = (row) => ({
10
- itemKey: row.itemKey,
11
- label: row.label,
12
- required: Boolean(row.required),
13
- checked: row.checkedAt !== null,
14
- checkedByType: row.checkedByType,
15
- checkedById: row.checkedById,
16
- checkedByName: name(row.checkedByType, row.checkedById),
17
- checkedAt: row.checkedAt === null ? null : iso(row.checkedAt),
18
- });
19
- const groups = new Map();
20
- for (const row of rows)
21
- groups.set(row.statusKey, [
22
- ...(groups.get(row.statusKey) ?? []),
23
- item(row),
24
- ]);
25
- const lists = [...groups].map(([key, items]) => ({
26
- statusKey: key,
27
- current: key === issue.statusKey,
28
- complete: items.every((entry) => !entry.required || entry.checked),
29
- items,
30
- }));
31
- return [
32
- ...lists.filter((list) => list.current),
33
- ...lists.filter((list) => !list.current),
34
- ];
35
- }
36
- return {
37
- async list(viewer, idOrKey) {
38
- const conn = deps.tx.read();
39
- return checklists(conn, await requireVisible(conn, viewer, idOrKey));
40
- },
41
- set(viewer, idOrKey, statusKey, itemKey, input) {
42
- if (typeof input?.checked !== 'boolean')
43
- throw invalid('INVALID_FIELD', 'checked must be true or false.');
44
- const checked = input.checked;
45
- return deps.tx.run(async (tx) => {
46
- const issue = await requireVisible(tx.conn, viewer, idOrKey);
47
- requireEditor(viewer);
48
- const row = (await findItems(tx.conn, issue.id, statusKey)).find((entry) => entry.itemKey === itemKey);
49
- if (!row)
50
- throw notFound('Checklist item');
51
- if ((row.checkedAt !== null) !== checked) {
52
- await setChecked(tx.conn, row.id, checked && viewer.actor.id
53
- ? { type: viewer.actor.type, id: viewer.actor.id }
54
- : null);
55
- await deps.activity.record(tx.conn, {
56
- issueId: issue.id,
57
- actor: viewer.actor,
58
- action: checked
59
- ? 'checklist_item_checked'
60
- : 'checklist_item_unchecked',
61
- details: {
62
- statusKey,
63
- itemKey,
64
- label: row.label,
65
- required: Boolean(row.required),
66
- },
67
- });
68
- tx.emit({ type: 'issue.changed', issueId: issue.id });
69
- }
70
- const [list] = await checklists(tx.conn, issue, statusKey);
71
- return list;
72
- });
73
- },
74
- async current(conn, issue) {
75
- const [list] = await checklists(conn, issue, issue.statusKey);
76
- return list ?? null;
77
- },
78
- };
79
- }
80
- //# sourceMappingURL=checklist.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checklist.service.js","sourceRoot":"","sources":["../../../../server/domains/checklists/checklist.service.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * `pmIssueChecklistItems`: each issue's copy of the checklist of a status it entered, one row per item.
3
- */
4
- import type { DatabaseConnection } from '@nocobase/db';
5
- import type { ChecklistItemDefinition } from '../../../shared/workflows.js';
6
- export declare const CHECKLIST_ITEMS = "pmIssueChecklistItems";
7
- export interface ChecklistItemRecord {
8
- readonly id: string;
9
- readonly issueId: string;
10
- readonly statusKey: string;
11
- readonly itemKey: string;
12
- readonly label: string;
13
- readonly required: boolean | number;
14
- readonly position: number;
15
- /** A kind's key (`shared/kinds.ts`). */
16
- readonly checkedByType: string | null;
17
- readonly checkedById: string | null;
18
- readonly checkedAt: Date | string | null;
19
- readonly createdAt: Date | string;
20
- readonly updatedAt: Date | string;
21
- }
22
- /** The issue's items, of one status or of all, in the order they were added and then by position. */
23
- export declare function findItems(conn: DatabaseConnection, issueId: string, statusKey?: string): Promise<ChecklistItemRecord[]>;
24
- /** Adds the items the issue's copy of `statusKey` lacks; returns how many. */
25
- export declare function addMissingItems(conn: DatabaseConnection, nextId: () => string, issueId: string, statusKey: string, definitions: readonly ChecklistItemDefinition[]): Promise<number>;
26
- /** The labels of the required items of `statusKey` nobody checked yet. */
27
- export declare function uncheckedRequired(conn: DatabaseConnection, issueId: string, statusKey: string): Promise<string[]>;
28
- export declare function setChecked(conn: DatabaseConnection, id: string, checkedBy: {
29
- readonly type: string;
30
- readonly id: string;
31
- } | null): Promise<void>;
32
- //# sourceMappingURL=checklist.store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checklist.store.d.ts","sourceRoot":"","sources":["../../../../server/domains/checklists/checklist.store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;CACnC;AAKD,qGAAqG;AACrG,wBAAsB,SAAS,CAC7B,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAQhC;AAED,8EAA8E;AAC9E,wBAAsB,eAAe,CACnC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,uBAAuB,EAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,0EAA0E;AAC1E,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAanB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC/D,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -1,66 +0,0 @@
1
- export const CHECKLIST_ITEMS = 'pmIssueChecklistItems';
2
- const items = (conn) => conn.repository(CHECKLIST_ITEMS);
3
- /** The issue's items, of one status or of all, in the order they were added and then by position. */
4
- export async function findItems(conn, issueId, statusKey) {
5
- return items(conn).findMany({
6
- filter: statusKey === undefined ? { issueId } : { issueId, statusKey },
7
- sort: (sort) => [
8
- sort.field('createdAt').asc(),
9
- sort.field('position').asc(),
10
- ],
11
- });
12
- }
13
- /** Adds the items the issue's copy of `statusKey` lacks; returns how many. */
14
- export async function addMissingItems(conn, nextId, issueId, statusKey, definitions) {
15
- const have = new Set((await findItems(conn, issueId, statusKey)).map((item) => item.itemKey));
16
- const now = new Date();
17
- let added = 0;
18
- for (const [position, item] of definitions.entries()) {
19
- if (have.has(item.key))
20
- continue;
21
- await items(conn).createOne({
22
- values: {
23
- id: nextId(),
24
- issueId,
25
- statusKey,
26
- itemKey: item.key,
27
- label: item.label,
28
- required: item.required,
29
- position,
30
- checkedByType: null,
31
- checkedById: null,
32
- checkedAt: null,
33
- createdAt: now,
34
- updatedAt: now,
35
- },
36
- });
37
- added += 1;
38
- }
39
- return added;
40
- }
41
- /** The labels of the required items of `statusKey` nobody checked yet. */
42
- export async function uncheckedRequired(conn, issueId, statusKey) {
43
- const rows = await items(conn).findMany({
44
- filter: (f) => f.and([
45
- f.string('issueId').eq(issueId),
46
- f.string('statusKey').eq(statusKey),
47
- f.boolean('required').isTrue(),
48
- f.date('checkedAt').empty(),
49
- ]),
50
- sort: (sort) => sort.field('position').asc(),
51
- select: (select) => select.fields('label'),
52
- });
53
- return rows.map((row) => row.label);
54
- }
55
- export async function setChecked(conn, id, checkedBy) {
56
- await items(conn).updateOne({
57
- filter: { id },
58
- values: {
59
- checkedByType: checkedBy?.type ?? null,
60
- checkedById: checkedBy?.id ?? null,
61
- checkedAt: checkedBy ? new Date() : null,
62
- updatedAt: new Date(),
63
- },
64
- });
65
- }
66
- //# sourceMappingURL=checklist.store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checklist.store.js","sourceRoot":"","sources":["../../../../server/domains/checklists/checklist.store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export { createChecklistService, type ChecklistService, } from './checklist.service.js';
2
- export { createChecklistRoutes } from './checklist.routes.js';
3
- export { addMissingItems, uncheckedRequired } from './checklist.store.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/domains/checklists/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +0,0 @@
1
- export { createChecklistService, } from './checklist.service.js';
2
- export { createChecklistRoutes } from './checklist.routes.js';
3
- export { addMissingItems, uncheckedRequired } from './checklist.store.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/domains/checklists/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,40 +0,0 @@
1
- /**
2
- * The status rule types this plugin brings (`shared/workflows.ts`, `BuiltInStatusRule`), written against the same
3
- * contract as the types other plugins contribute (`rule-types.ts`), so the workflows domain validates, describes and
4
- * runs every rule one way. Their stored form is unchanged: `subtasksDone` and `blockersDone` keep no settings.
5
- *
6
- * - `checklist`: entering the status gives the issue its own copy of the items (a copy it already has keeps its
7
- * checks, and gains the items added since); leaving it for anything but a closed status waits until the required
8
- * items are checked (400 `CHECKLIST_INCOMPLETE`).
9
- * - `notifyOwner`: the owner is told the issue entered the status (activity `owner_notified`, event
10
- * `workflow.ownerNotified`, which the provider turns into an in-app notification), unless the owner moved it.
11
- * - `subtasksDone`: entering the status waits until every live sub-issue is finished (400 `SUBTASKS_OPEN`); a closed
12
- * status never waits, so an issue can always be cancelled.
13
- * - `blockersDone`: entering the status waits until nothing holds the issue (400 `ISSUE_BLOCKED`).
14
- * - `startOption`: the New issue form offers the status as a way to start an issue (`IssueStarts`); entering it does
15
- * nothing. Only on a status a new issue may be in: not done or closed.
16
- *
17
- * Their outcomes are not recorded as `stage_action_*` activity (`issue.status.ts`): each records what it did itself.
18
- */
19
- import type { DatabaseConnection } from '@nocobase/db';
20
- import type { Issue } from '../../../shared/issues.js';
21
- import type { Blocker } from '../../../shared/subtasks.js';
22
- import { type RuleMessage } from '../../../shared/workflows.js';
23
- import type { ActivityRecorder } from '../../kernel/activity.js';
24
- import type { IdSource } from '../../kernel/ids.js';
25
- import type { StatusRuleType } from './rule-types.js';
26
- import './workflow.events.js';
27
- /** A valid rule's message as it is kept and sent: trimmed text, the key with what it has, or null for none. */
28
- export declare function ruleMessage(message: unknown): RuleMessage | null;
29
- /** Sub-issues and blockers, as the rules that wait for them read them (`domains/subtasks`). */
30
- export interface RelationChecks {
31
- /** Live sub-issues not finished by their own workflow, by number. */
32
- openChildren(conn: DatabaseConnection, issueId: string): Promise<readonly Pick<Issue, 'identifier'>[]>;
33
- blockers(conn: DatabaseConnection, issue: Issue): Promise<readonly Blocker[]>;
34
- }
35
- export declare function builtInStatusRuleTypes(deps: {
36
- readonly ids: IdSource;
37
- readonly activity: ActivityRecorder;
38
- readonly relations: () => RelationChecks;
39
- }): readonly StatusRuleType[];
40
- //# sourceMappingURL=built-in-rule-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"built-in-rule-types.d.ts","sourceRoot":"","sources":["../../../../server/domains/workflows/built-in-rule-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAWL,KAAK,WAAW,EAEjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,sBAAsB,CAAC;AA8H9B,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAUhE;AASD,+FAA+F;AAC/F,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,YAAY,CACV,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CAC/E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,cAAc,CAAC;CAC1C,GAAG,SAAS,cAAc,EAAE,CAiJ5B"}
@@ -1,260 +0,0 @@
1
- import { CHECKLIST_ITEMS_MAX, CHECKLIST_ITEM_KEY_PATTERN, CHECKLIST_LABEL_MAX, isLocalizedMessage, messageText, MESSAGE_KEY_MAX, MESSAGE_NAMESPACE_PATTERN, NOTIFY_MESSAGE_MAX, START_LABEL_MAX, } from '../../../shared/workflows.js';
2
- import { addMissingItems, uncheckedRequired } from '../checklists/index.js';
3
- import './workflow.events.js';
4
- const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
5
- function checklistIssues(config) {
6
- const issues = [];
7
- for (const field of Object.keys(config))
8
- if (field !== 'items')
9
- issues.push({ path: field, message: 'Unknown field.' });
10
- const { items } = config;
11
- if (!Array.isArray(items) ||
12
- items.length === 0 ||
13
- items.length > CHECKLIST_ITEMS_MAX)
14
- return [
15
- ...issues,
16
- { path: 'items', message: `1 to ${CHECKLIST_ITEMS_MAX} items.` },
17
- ];
18
- const keys = new Set();
19
- items.forEach((item, index) => {
20
- const at = `items[${index}]`;
21
- if (!isObject(item)) {
22
- issues.push({
23
- path: at,
24
- message: 'An item is { key, label, required }.',
25
- });
26
- return;
27
- }
28
- for (const field of Object.keys(item))
29
- if (!['key', 'label', 'required'].includes(field))
30
- issues.push({ path: `${at}.${field}`, message: 'Unknown field.' });
31
- if (typeof item.key !== 'string' ||
32
- !CHECKLIST_ITEM_KEY_PATTERN.test(item.key))
33
- issues.push({
34
- path: `${at}.key`,
35
- message: 'A key is 1 to 64 lowercase letters, digits, hyphens or underscores.',
36
- });
37
- else if (keys.has(item.key))
38
- issues.push({
39
- path: `${at}.key`,
40
- message: `The key ${item.key} is used twice.`,
41
- });
42
- else
43
- keys.add(item.key);
44
- if (typeof item.label !== 'string' ||
45
- !item.label.trim() ||
46
- item.label.length > CHECKLIST_LABEL_MAX)
47
- issues.push({
48
- path: `${at}.label`,
49
- message: `A label is 1 to ${CHECKLIST_LABEL_MAX} characters.`,
50
- });
51
- if (typeof item.required !== 'boolean')
52
- issues.push({
53
- path: `${at}.required`,
54
- message: 'required is true or false.',
55
- });
56
- });
57
- return issues;
58
- }
59
- /** Problems with a rule's message at `path`: text of at most `max` characters, or `{ key, ns, defaultValue }`. */
60
- function messageIssues(path, message, max) {
61
- const issues = [];
62
- if (message === undefined)
63
- return issues;
64
- if (isLocalizedMessage(message)) {
65
- const fields = message;
66
- for (const field of Object.keys(fields))
67
- if (!['key', 'ns', 'defaultValue'].includes(field))
68
- issues.push({ path: `${path}.${field}`, message: 'Unknown field.' });
69
- if (!message.key.trim() || message.key.length > MESSAGE_KEY_MAX)
70
- issues.push({
71
- path: `${path}.key`,
72
- message: `A message key is 1 to ${MESSAGE_KEY_MAX} characters.`,
73
- });
74
- if (fields.ns !== undefined &&
75
- (typeof fields.ns !== 'string' ||
76
- !MESSAGE_NAMESPACE_PATTERN.test(fields.ns)))
77
- issues.push({ path: `${path}.ns`, message: 'Not a namespace.' });
78
- if (fields.defaultValue !== undefined &&
79
- (typeof fields.defaultValue !== 'string' ||
80
- fields.defaultValue.length > max))
81
- issues.push({
82
- path: `${path}.defaultValue`,
83
- message: `A message is at most ${max} characters.`,
84
- });
85
- }
86
- else if (typeof message !== 'string' || message.length > max)
87
- issues.push({
88
- path,
89
- message: `A message is text of at most ${max} characters, or { key, ns, defaultValue }.`,
90
- });
91
- return issues;
92
- }
93
- function notifyIssues(config) {
94
- return [
95
- ...Object.keys(config)
96
- .filter((field) => field !== 'message')
97
- .map((field) => ({ path: field, message: 'Unknown field.' })),
98
- ...messageIssues('message', config.message, NOTIFY_MESSAGE_MAX),
99
- ];
100
- }
101
- function startOptionIssues(config) {
102
- return [
103
- ...Object.keys(config)
104
- .filter((field) => field !== 'label' && field !== 'hint')
105
- .map((field) => ({ path: field, message: 'Unknown field.' })),
106
- ...messageIssues('label', config.label, START_LABEL_MAX),
107
- ...messageIssues('hint', config.hint, NOTIFY_MESSAGE_MAX),
108
- ];
109
- }
110
- /** A valid rule's message as it is kept and sent: trimmed text, the key with what it has, or null for none. */
111
- export function ruleMessage(message) {
112
- if (typeof message === 'string')
113
- return message.trim() || null;
114
- if (!isLocalizedMessage(message))
115
- return null;
116
- return {
117
- key: message.key,
118
- ...(message.ns ? { ns: message.ns } : {}),
119
- ...(message.defaultValue?.trim()
120
- ? { defaultValue: message.defaultValue.trim() }
121
- : {}),
122
- };
123
- }
124
- function noSettings(config) {
125
- return Object.keys(config).map((field) => ({
126
- path: field,
127
- message: 'Unknown field.',
128
- }));
129
- }
130
- export function builtInStatusRuleTypes(deps) {
131
- return [
132
- {
133
- type: 'checklist',
134
- validate: checklistIssues,
135
- describe: (config) => ({
136
- summary: `Gives the issue a checklist of ${Array.isArray(config.items) ? config.items.length : 0} item(s).`,
137
- }),
138
- async canLeave(check) {
139
- if (check.status.category === 'closed')
140
- return null;
141
- const missing = await uncheckedRequired(check.tx.conn, check.issue.id, check.from);
142
- return missing.length === 0
143
- ? null
144
- : {
145
- code: 'CHECKLIST_INCOMPLETE',
146
- message: `Check the required items of ${check.from} first: ${missing.join('; ')}.`,
147
- details: { statusKey: check.from, items: missing },
148
- };
149
- },
150
- async entered(entry, config) {
151
- const items = (config.items ?? []);
152
- await addMissingItems(entry.tx.conn, () => deps.ids.next(), entry.issue.id, entry.status.key, items.map((item) => ({ ...item, label: item.label.trim() })));
153
- return undefined;
154
- },
155
- },
156
- {
157
- type: 'notifyOwner',
158
- validate: notifyIssues,
159
- describe(config) {
160
- // Described in the words it falls back to, not translated: the summary is the plugin's own English.
161
- const message = messageText(config.message, (key, options) => options?.defaultValue ?? key);
162
- return {
163
- summary: message
164
- ? `Notifies the issue owner: "${message}".`
165
- : 'Notifies the issue owner.',
166
- };
167
- },
168
- async entered(entry, config) {
169
- const { issue, actor, status } = entry;
170
- if (actor.type === 'user' && actor.id === issue.ownerUserId)
171
- return { status: 'skipped', reason: 'ownerMovedIt' };
172
- const message = ruleMessage(config.message);
173
- await deps.activity.record(entry.tx.conn, {
174
- issueId: issue.id,
175
- actor,
176
- action: 'owner_notified',
177
- details: {
178
- statusKey: status.key,
179
- ownerUserId: issue.ownerUserId,
180
- message,
181
- },
182
- });
183
- entry.tx.emit({
184
- type: 'workflow.ownerNotified',
185
- issueId: issue.id,
186
- identifier: issue.identifier,
187
- title: issue.title,
188
- ownerUserId: issue.ownerUserId,
189
- statusKey: status.key,
190
- statusName: status.name,
191
- message,
192
- });
193
- return undefined;
194
- },
195
- },
196
- {
197
- type: 'subtasksDone',
198
- validate: noSettings,
199
- describe: () => ({ summary: 'Waits until every sub-issue is finished.' }),
200
- async canEnter(check) {
201
- if (check.status.category === 'closed')
202
- return null;
203
- const open = await deps
204
- .relations()
205
- .openChildren(check.tx.conn, check.issue.id);
206
- return open.length === 0
207
- ? null
208
- : {
209
- code: 'SUBTASKS_OPEN',
210
- message: `Finish the sub-issues first: ${open
211
- .slice(0, 10)
212
- .map((child) => child.identifier)
213
- .join(', ')}.`,
214
- details: {
215
- count: open.length,
216
- issues: open.slice(0, 10).map((child) => child.identifier),
217
- },
218
- };
219
- },
220
- },
221
- {
222
- type: 'blockersDone',
223
- validate: noSettings,
224
- describe: () => ({ summary: 'Waits until nothing blocks the issue.' }),
225
- async canEnter(check) {
226
- const blockers = await deps
227
- .relations()
228
- .blockers(check.tx.conn, check.issue);
229
- return blockers.length === 0
230
- ? null
231
- : {
232
- code: 'ISSUE_BLOCKED',
233
- message: `The issue waits for ${blockers
234
- .map((blocker) => blocker.identifier)
235
- .join(', ')}.`,
236
- details: {
237
- blockers: blockers.map((blocker) => ({
238
- identifier: blocker.identifier,
239
- reason: blocker.reason,
240
- })),
241
- },
242
- };
243
- },
244
- },
245
- {
246
- type: 'startOption',
247
- categories: ['unstarted', 'started'],
248
- validate: startOptionIssues,
249
- describe(config) {
250
- const label = messageText(config.label, (key, options) => options?.defaultValue ?? key);
251
- return {
252
- summary: label
253
- ? `Offered as "${label}" when creating an issue.`
254
- : 'Offered when creating an issue.',
255
- };
256
- },
257
- },
258
- ];
259
- }
260
- //# sourceMappingURL=built-in-rule-types.js.map