@nocobase/app-plugin-projects 0.1.0-beta.7 → 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 (457) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +55 -103
  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 +6 -256
  50. package/dist/client/locales/en-US.d.ts.map +1 -1
  51. package/dist/client/locales/en-US.js +9 -255
  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 +10 -248
  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/issues/index.d.ts +1 -1
  119. package/dist/server/domains/issues/index.d.ts.map +1 -1
  120. package/dist/server/domains/issues/index.js +1 -1
  121. package/dist/server/domains/issues/index.js.map +1 -1
  122. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  123. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  124. package/dist/server/domains/issues/issue.context.js +1 -22
  125. package/dist/server/domains/issues/issue.context.js.map +1 -1
  126. package/dist/server/domains/issues/issue.fields.d.ts +3 -3
  127. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  128. package/dist/server/domains/issues/issue.fields.js +12 -15
  129. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  130. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  131. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  132. package/dist/server/domains/issues/issue.projects.js +1 -2
  133. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  134. package/dist/server/domains/issues/issue.queries.d.ts +5 -7
  135. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  136. package/dist/server/domains/issues/issue.queries.js +12 -41
  137. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  138. package/dist/server/domains/issues/issue.routes.d.ts +1 -1
  139. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  140. package/dist/server/domains/issues/issue.routes.js +17 -37
  141. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  142. package/dist/server/domains/issues/issue.service.d.ts +20 -44
  143. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  144. package/dist/server/domains/issues/issue.service.js +19 -80
  145. package/dist/server/domains/issues/issue.service.js.map +1 -1
  146. package/dist/server/domains/issues/issue.status.d.ts +6 -10
  147. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  148. package/dist/server/domains/issues/issue.status.js +3 -20
  149. package/dist/server/domains/issues/issue.status.js.map +1 -1
  150. package/dist/server/domains/issues/ports.d.ts +19 -36
  151. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  152. package/dist/server/domains/issues/ports.js +0 -5
  153. package/dist/server/domains/issues/ports.js.map +1 -1
  154. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  155. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  156. package/dist/server/domains/notices/notice.planner.js +2 -1
  157. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  158. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  159. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  160. package/dist/server/domains/notices/notice.rules.js +4 -5
  161. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  162. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  163. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  164. package/dist/server/domains/plans/plan.ops.js +7 -10
  165. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  166. package/dist/server/domains/projects/index.d.ts +1 -1
  167. package/dist/server/domains/projects/index.d.ts.map +1 -1
  168. package/dist/server/domains/projects/index.js.map +1 -1
  169. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  170. package/dist/server/domains/projects/project.routes.js +1 -3
  171. package/dist/server/domains/projects/project.routes.js.map +1 -1
  172. package/dist/server/domains/projects/project.service.d.ts +0 -7
  173. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  174. package/dist/server/domains/projects/project.service.js +0 -17
  175. package/dist/server/domains/projects/project.service.js.map +1 -1
  176. package/dist/server/domains/projects/project.store.d.ts +0 -1
  177. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  178. package/dist/server/domains/projects/project.store.js +0 -1
  179. package/dist/server/domains/projects/project.store.js.map +1 -1
  180. package/dist/server/domains/reports/report.service.d.ts +1 -12
  181. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  182. package/dist/server/domains/reports/report.service.js +23 -79
  183. package/dist/server/domains/reports/report.service.js.map +1 -1
  184. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  185. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  186. package/dist/server/domains/statuses/event-types.js +31 -0
  187. package/dist/server/domains/statuses/event-types.js.map +1 -0
  188. package/dist/server/domains/statuses/index.d.ts +4 -0
  189. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  190. package/dist/server/domains/statuses/index.js +4 -0
  191. package/dist/server/domains/statuses/index.js.map +1 -0
  192. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  193. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  194. package/dist/server/domains/statuses/status.catalog.js +119 -0
  195. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  196. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  197. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  198. package/dist/server/domains/statuses/status.events.js +2 -0
  199. package/dist/server/domains/statuses/status.events.js.map +1 -0
  200. package/dist/server/domains/statuses/status.fire.d.ts +48 -0
  201. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  202. package/dist/server/domains/statuses/status.fire.js +38 -0
  203. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  204. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  205. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  206. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  207. package/dist/server/domains/subtasks/subtask.blocking.d.ts +4 -4
  208. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  209. package/dist/server/domains/subtasks/subtask.blocking.js +2 -10
  210. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  211. package/dist/server/domains/subtasks/subtask.release.d.ts +5 -9
  212. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  213. package/dist/server/domains/subtasks/subtask.release.js +0 -4
  214. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  215. package/dist/server/domains/subtasks/subtask.service.d.ts +1 -3
  216. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  217. package/dist/server/domains/subtasks/subtask.service.js +0 -12
  218. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  219. package/dist/server/kernel/http.d.ts.map +1 -1
  220. package/dist/server/kernel/http.js +0 -3
  221. package/dist/server/kernel/http.js.map +1 -1
  222. package/dist/server/kernel/kinds.d.ts +24 -6
  223. package/dist/server/kernel/kinds.d.ts.map +1 -1
  224. package/dist/server/kernel/kinds.js +21 -1
  225. package/dist/server/kernel/kinds.js.map +1 -1
  226. package/dist/server/kernel/work.d.ts +8 -4
  227. package/dist/server/kernel/work.d.ts.map +1 -1
  228. package/dist/server/kernel/work.js +21 -10
  229. package/dist/server/kernel/work.js.map +1 -1
  230. package/dist/server/locales/en-US.d.ts +0 -9
  231. package/dist/server/locales/en-US.d.ts.map +1 -1
  232. package/dist/server/locales/en-US.js +0 -9
  233. package/dist/server/locales/en-US.js.map +1 -1
  234. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  235. package/dist/server/locales/zh-CN.js +2 -11
  236. package/dist/server/locales/zh-CN.js.map +1 -1
  237. package/dist/server/providers/notifications.d.ts +1 -0
  238. package/dist/server/providers/notifications.d.ts.map +1 -1
  239. package/dist/server/providers/notifications.js +6 -120
  240. package/dist/server/providers/notifications.js.map +1 -1
  241. package/dist/server/providers/projects.d.ts +3 -8
  242. package/dist/server/providers/projects.d.ts.map +1 -1
  243. package/dist/server/providers/projects.js +8 -27
  244. package/dist/server/providers/projects.js.map +1 -1
  245. package/dist/server/routes/api.d.ts.map +1 -1
  246. package/dist/server/routes/api.js +0 -6
  247. package/dist/server/routes/api.js.map +1 -1
  248. package/dist/server/routes/schemas.d.ts +1 -27
  249. package/dist/server/routes/schemas.d.ts.map +1 -1
  250. package/dist/server/routes/schemas.js +5 -166
  251. package/dist/server/routes/schemas.js.map +1 -1
  252. package/dist/server/tokens.d.ts +12 -34
  253. package/dist/server/tokens.d.ts.map +1 -1
  254. package/dist/server/tokens.js +4 -16
  255. package/dist/server/tokens.js.map +1 -1
  256. package/dist/shared/access.d.ts +0 -1
  257. package/dist/shared/access.d.ts.map +1 -1
  258. package/dist/shared/access.js +2 -11
  259. package/dist/shared/access.js.map +1 -1
  260. package/dist/shared/issues.d.ts +5 -36
  261. package/dist/shared/issues.d.ts.map +1 -1
  262. package/dist/shared/issues.js.map +1 -1
  263. package/dist/shared/kinds.d.ts +3 -1
  264. package/dist/shared/kinds.d.ts.map +1 -1
  265. package/dist/shared/kinds.js +1 -1
  266. package/dist/shared/locales/access.en-US.d.ts +0 -1
  267. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  268. package/dist/shared/locales/access.en-US.js +1 -2
  269. package/dist/shared/locales/access.en-US.js.map +1 -1
  270. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  271. package/dist/shared/locales/access.zh-CN.js +1 -2
  272. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  273. package/dist/shared/plans.d.ts +4 -6
  274. package/dist/shared/plans.d.ts.map +1 -1
  275. package/dist/shared/plans.js +2 -1
  276. package/dist/shared/plans.js.map +1 -1
  277. package/dist/shared/projects.d.ts +0 -4
  278. package/dist/shared/projects.d.ts.map +1 -1
  279. package/dist/shared/projects.js.map +1 -1
  280. package/dist/shared/realtime.d.ts +1 -1
  281. package/dist/shared/realtime.d.ts.map +1 -1
  282. package/dist/shared/statuses.d.ts +42 -0
  283. package/dist/shared/statuses.d.ts.map +1 -0
  284. package/dist/shared/statuses.js +73 -0
  285. package/dist/shared/statuses.js.map +1 -0
  286. package/dist/shared/subtasks.d.ts +3 -3
  287. package/dist/shared/subtasks.d.ts.map +1 -1
  288. package/package.json +7 -15
  289. package/skills/nocobase-app-plugin-projects/SKILL.md +26 -50
  290. package/dist/client/hooks/use-workflow-leave-guard.d.ts +0 -3
  291. package/dist/client/hooks/use-workflow-leave-guard.d.ts.map +0 -1
  292. package/dist/client/hooks/use-workflow-leave-guard.js +0 -31
  293. package/dist/client/hooks/use-workflow-leave-guard.js.map +0 -1
  294. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  295. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  296. package/dist/client/lib/built-in-rule-editors.js +0 -86
  297. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  298. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  299. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  300. package/dist/client/lib/built-in-rule-types.js +0 -63
  301. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  302. package/dist/client/lib/status-rule-types.d.ts +0 -60
  303. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  304. package/dist/client/lib/status-rule-types.js +0 -38
  305. package/dist/client/lib/status-rule-types.js.map +0 -1
  306. package/dist/client/lib/workflow-events.d.ts +0 -25
  307. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  308. package/dist/client/lib/workflow-events.js +0 -30
  309. package/dist/client/lib/workflow-events.js.map +0 -1
  310. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  311. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  312. package/dist/client/pages/config/workflow-detail.js +0 -207
  313. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  314. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  315. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  316. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  317. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  318. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  319. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  320. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  321. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  322. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  323. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  324. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  325. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  326. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  327. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  328. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  329. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  330. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  331. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  332. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  333. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  334. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  335. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  336. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  337. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  338. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  339. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  340. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  341. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  342. package/dist/client/pages/config/workflows.d.ts +0 -8
  343. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  344. package/dist/client/pages/config/workflows.js +0 -139
  345. package/dist/client/pages/config/workflows.js.map +0 -1
  346. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  347. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  348. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  349. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  350. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  351. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  352. package/dist/client/pages/projects/workflow-select.js +0 -34
  353. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  354. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  355. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  356. package/dist/server/domains/approvals/approval.events.js +0 -2
  357. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  358. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  359. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  360. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  361. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  362. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  363. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  364. package/dist/server/domains/approvals/approval.routes.js +0 -87
  365. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  366. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  367. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  368. package/dist/server/domains/approvals/approval.service.js +0 -261
  369. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  370. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  371. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  372. package/dist/server/domains/approvals/approval.store.js +0 -66
  373. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  374. package/dist/server/domains/approvals/index.d.ts +0 -4
  375. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  376. package/dist/server/domains/approvals/index.js +0 -3
  377. package/dist/server/domains/approvals/index.js.map +0 -1
  378. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  379. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  380. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  381. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  382. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  383. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  384. package/dist/server/domains/checklists/checklist.service.js +0 -80
  385. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  386. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  387. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  388. package/dist/server/domains/checklists/checklist.store.js +0 -66
  389. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  390. package/dist/server/domains/checklists/index.d.ts +0 -4
  391. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  392. package/dist/server/domains/checklists/index.js +0 -4
  393. package/dist/server/domains/checklists/index.js.map +0 -1
  394. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  395. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  396. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  397. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  398. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  399. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  400. package/dist/server/domains/workflows/event-types.js +0 -31
  401. package/dist/server/domains/workflows/event-types.js.map +0 -1
  402. package/dist/server/domains/workflows/index.d.ts +0 -10
  403. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  404. package/dist/server/domains/workflows/index.js +0 -10
  405. package/dist/server/domains/workflows/index.js.map +0 -1
  406. package/dist/server/domains/workflows/rule-types.d.ts +0 -129
  407. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  408. package/dist/server/domains/workflows/rule-types.js +0 -33
  409. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  410. package/dist/server/domains/workflows/templates.d.ts +0 -62
  411. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  412. package/dist/server/domains/workflows/templates.js +0 -63
  413. package/dist/server/domains/workflows/templates.js.map +0 -1
  414. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  415. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  416. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  417. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  418. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  419. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  420. package/dist/server/domains/workflows/workflow.events.js +0 -2
  421. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  422. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  423. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  424. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  425. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  426. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  427. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  428. package/dist/server/domains/workflows/workflow.registry.js +0 -132
  429. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  430. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  431. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  432. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  433. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  434. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  435. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  436. package/dist/server/domains/workflows/workflow.rules.js +0 -212
  437. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  438. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  439. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  440. package/dist/server/domains/workflows/workflow.service.js +0 -366
  441. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  442. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  443. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  444. package/dist/server/domains/workflows/workflow.store.js +0 -148
  445. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  446. package/dist/shared/approvals.d.ts +0 -37
  447. package/dist/shared/approvals.d.ts.map +0 -1
  448. package/dist/shared/approvals.js +0 -4
  449. package/dist/shared/approvals.js.map +0 -1
  450. package/dist/shared/checklists.d.ts +0 -27
  451. package/dist/shared/checklists.d.ts.map +0 -1
  452. package/dist/shared/checklists.js +0 -7
  453. package/dist/shared/checklists.js.map +0 -1
  454. package/dist/shared/workflows.d.ts +0 -276
  455. package/dist/shared/workflows.d.ts.map +0 -1
  456. package/dist/shared/workflows.js +0 -151
  457. 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":"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"}
@@ -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