gemi 0.117.0 → 0.118.0

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 (225) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/bun/plugin.js +1 -1
  5. package/dist/bun/preload.js +1 -1
  6. package/dist/{chunk-6y4nk9f1.js → chunk-01ehxca0.js} +2 -2
  7. package/dist/{chunk-6y4nk9f1.js.map → chunk-01ehxca0.js.map} +1 -1
  8. package/dist/chunk-0gtyects.js +10 -0
  9. package/dist/{chunk-2czfefn2.js.map → chunk-0gtyects.js.map} +3 -3
  10. package/dist/{chunk-gn7kne7r.js → chunk-1m3hvy3q.js} +2 -2
  11. package/dist/{chunk-gn7kne7r.js.map → chunk-1m3hvy3q.js.map} +1 -1
  12. package/dist/{chunk-1ckha5dt.js → chunk-1z1rj2zq.js} +2 -2
  13. package/dist/{chunk-1ckha5dt.js.map → chunk-1z1rj2zq.js.map} +1 -1
  14. package/dist/{chunk-n9jyjp4a.js → chunk-30xxc6r7.js} +2 -2
  15. package/dist/{chunk-n9jyjp4a.js.map → chunk-30xxc6r7.js.map} +1 -1
  16. package/dist/{chunk-077rea02.js → chunk-33s2xqv1.js} +1 -1
  17. package/dist/{chunk-5m8vvtvn.js → chunk-39kyz4k6.js} +2 -2
  18. package/dist/{chunk-5m8vvtvn.js.map → chunk-39kyz4k6.js.map} +1 -1
  19. package/dist/chunk-3nf95j9e.js +5 -0
  20. package/dist/{chunk-63ewmmhc.js.map → chunk-3nf95j9e.js.map} +1 -1
  21. package/dist/{chunk-kpn7f58a.js → chunk-3zxfd7pn.js} +3 -3
  22. package/dist/{chunk-kpn7f58a.js.map → chunk-3zxfd7pn.js.map} +1 -1
  23. package/dist/{chunk-62jw0vsf.js → chunk-453rmkpm.js} +2 -2
  24. package/dist/{chunk-62jw0vsf.js.map → chunk-453rmkpm.js.map} +1 -1
  25. package/dist/{chunk-mhteg4yz.js → chunk-47h12eme.js} +5 -5
  26. package/dist/{chunk-mhteg4yz.js.map → chunk-47h12eme.js.map} +1 -1
  27. package/dist/{chunk-x84as3vy.js → chunk-490sbcma.js} +2 -2
  28. package/dist/{chunk-x84as3vy.js.map → chunk-490sbcma.js.map} +1 -1
  29. package/dist/{chunk-stnd9qht.js → chunk-4c1kdd8p.js} +2 -2
  30. package/dist/{chunk-stnd9qht.js.map → chunk-4c1kdd8p.js.map} +1 -1
  31. package/dist/{chunk-j1453bn1.js → chunk-5cgq9c43.js} +2 -2
  32. package/dist/{chunk-j1453bn1.js.map → chunk-5cgq9c43.js.map} +1 -1
  33. package/dist/{chunk-hr61ekcr.js → chunk-5dbpgyrx.js} +2 -2
  34. package/dist/{chunk-hr61ekcr.js.map → chunk-5dbpgyrx.js.map} +1 -1
  35. package/dist/{chunk-wzzrz612.js → chunk-5ses4tcz.js} +2 -2
  36. package/dist/{chunk-wzzrz612.js.map → chunk-5ses4tcz.js.map} +1 -1
  37. package/dist/{chunk-pepzecrm.js → chunk-675kzd7z.js} +2 -2
  38. package/dist/{chunk-pepzecrm.js.map → chunk-675kzd7z.js.map} +1 -1
  39. package/dist/{chunk-yhp6bvhj.js → chunk-76p0rf4d.js} +3 -3
  40. package/dist/{chunk-yhp6bvhj.js.map → chunk-76p0rf4d.js.map} +1 -1
  41. package/dist/{chunk-bvqae0px.js → chunk-8t6dwwz6.js} +1 -1
  42. package/dist/{chunk-a32wfzdq.js → chunk-8wcpxm41.js} +2 -2
  43. package/dist/{chunk-a32wfzdq.js.map → chunk-8wcpxm41.js.map} +1 -1
  44. package/dist/{chunk-ntxsdchf.js → chunk-9pkj7sk6.js} +2 -2
  45. package/dist/{chunk-ntxsdchf.js.map → chunk-9pkj7sk6.js.map} +1 -1
  46. package/dist/{chunk-w4e480he.js → chunk-a1qt8aky.js} +2 -2
  47. package/dist/{chunk-w4e480he.js.map → chunk-a1qt8aky.js.map} +1 -1
  48. package/dist/{chunk-e7ezmag9.js → chunk-aedkrck1.js} +1 -1
  49. package/dist/{chunk-arwmvgrz.js → chunk-aqpaw4jq.js} +2 -2
  50. package/dist/{chunk-arwmvgrz.js.map → chunk-aqpaw4jq.js.map} +1 -1
  51. package/dist/{chunk-hvpn18bb.js → chunk-bgwtdbfw.js} +3 -3
  52. package/dist/{chunk-hvpn18bb.js.map → chunk-bgwtdbfw.js.map} +1 -1
  53. package/dist/{chunk-gjy2qjcr.js → chunk-bz8xssrc.js} +2 -2
  54. package/dist/{chunk-gjy2qjcr.js.map → chunk-bz8xssrc.js.map} +1 -1
  55. package/dist/{chunk-yvtmygrk.js → chunk-cte6ysqd.js} +4 -4
  56. package/dist/{chunk-yvtmygrk.js.map → chunk-cte6ysqd.js.map} +1 -1
  57. package/dist/{chunk-3w4hk6q2.js → chunk-cvfg88cx.js} +3 -3
  58. package/dist/{chunk-3w4hk6q2.js.map → chunk-cvfg88cx.js.map} +1 -1
  59. package/dist/{chunk-wk1tp1f1.js → chunk-d806cy7p.js} +2 -2
  60. package/dist/{chunk-wk1tp1f1.js.map → chunk-d806cy7p.js.map} +1 -1
  61. package/dist/{chunk-zkjs3m5m.js → chunk-dwpn6fze.js} +2 -2
  62. package/dist/{chunk-zkjs3m5m.js.map → chunk-dwpn6fze.js.map} +1 -1
  63. package/dist/{chunk-nb2gggba.js → chunk-ebret82e.js} +3 -3
  64. package/dist/{chunk-nb2gggba.js.map → chunk-ebret82e.js.map} +1 -1
  65. package/dist/{chunk-g2wncay4.js → chunk-eke2frrm.js} +3 -3
  66. package/dist/{chunk-g2wncay4.js.map → chunk-eke2frrm.js.map} +1 -1
  67. package/dist/{chunk-ffgmqwzy.js → chunk-fsj5k511.js} +2 -2
  68. package/dist/{chunk-ffgmqwzy.js.map → chunk-fsj5k511.js.map} +1 -1
  69. package/dist/{chunk-076jezzg.js → chunk-g5ppst76.js} +3 -3
  70. package/dist/{chunk-076jezzg.js.map → chunk-g5ppst76.js.map} +1 -1
  71. package/dist/{chunk-37pk2cjg.js → chunk-g9hhdcax.js} +2 -2
  72. package/dist/{chunk-37pk2cjg.js.map → chunk-g9hhdcax.js.map} +1 -1
  73. package/dist/{chunk-dz99g58c.js → chunk-gqfqnv3f.js} +2 -2
  74. package/dist/{chunk-dz99g58c.js.map → chunk-gqfqnv3f.js.map} +1 -1
  75. package/dist/{chunk-51w202vr.js → chunk-hkf2k2eq.js} +3 -3
  76. package/dist/{chunk-51w202vr.js.map → chunk-hkf2k2eq.js.map} +1 -1
  77. package/dist/{chunk-dcgvq79a.js → chunk-hm9cjxy2.js} +2 -2
  78. package/dist/{chunk-dcgvq79a.js.map → chunk-hm9cjxy2.js.map} +1 -1
  79. package/dist/{chunk-5w6kyxsj.js → chunk-hr1r3g0d.js} +2 -2
  80. package/dist/{chunk-5w6kyxsj.js.map → chunk-hr1r3g0d.js.map} +1 -1
  81. package/dist/{chunk-fnwbbmnk.js → chunk-hzepfrzy.js} +2 -2
  82. package/dist/{chunk-fnwbbmnk.js.map → chunk-hzepfrzy.js.map} +1 -1
  83. package/dist/{chunk-pgy3mfxw.js → chunk-j5858bz7.js} +2 -2
  84. package/dist/{chunk-pgy3mfxw.js.map → chunk-j5858bz7.js.map} +1 -1
  85. package/dist/{chunk-c2n6zdyd.js → chunk-jf6qqzat.js} +2 -2
  86. package/dist/{chunk-c2n6zdyd.js.map → chunk-jf6qqzat.js.map} +1 -1
  87. package/dist/{chunk-8gtc3s1y.js → chunk-jg79n382.js} +2 -2
  88. package/dist/{chunk-8gtc3s1y.js.map → chunk-jg79n382.js.map} +1 -1
  89. package/dist/{chunk-00n3gwr8.js → chunk-k31qfe7a.js} +3 -3
  90. package/dist/{chunk-00n3gwr8.js.map → chunk-k31qfe7a.js.map} +1 -1
  91. package/dist/{chunk-t65074mw.js → chunk-kkte8nze.js} +3 -3
  92. package/dist/{chunk-t65074mw.js.map → chunk-kkte8nze.js.map} +1 -1
  93. package/dist/{chunk-x7qwx07b.js → chunk-m4kmetpb.js} +2 -2
  94. package/dist/{chunk-x7qwx07b.js.map → chunk-m4kmetpb.js.map} +1 -1
  95. package/dist/{chunk-ge9xjwgq.js → chunk-n4sdm0jn.js} +3 -3
  96. package/dist/{chunk-ge9xjwgq.js.map → chunk-n4sdm0jn.js.map} +1 -1
  97. package/dist/chunk-nang3847.js +416 -0
  98. package/dist/chunk-nang3847.js.map +24 -0
  99. package/dist/{chunk-vj5necm0.js → chunk-nrezmscd.js} +1 -1
  100. package/dist/{chunk-v8vnxkvp.js → chunk-p83erprx.js} +2 -2
  101. package/dist/{chunk-v8vnxkvp.js.map → chunk-p83erprx.js.map} +1 -1
  102. package/dist/{chunk-sj4f7x4p.js → chunk-pkr5dsbk.js} +2 -2
  103. package/dist/{chunk-sj4f7x4p.js.map → chunk-pkr5dsbk.js.map} +1 -1
  104. package/dist/{chunk-f8vcwzgd.js → chunk-pqc16rrx.js} +2 -2
  105. package/dist/{chunk-f8vcwzgd.js.map → chunk-pqc16rrx.js.map} +1 -1
  106. package/dist/{chunk-hvgmqt6z.js → chunk-pvz90a49.js} +2 -2
  107. package/dist/{chunk-hvgmqt6z.js.map → chunk-pvz90a49.js.map} +1 -1
  108. package/dist/{chunk-s4f56035.js → chunk-q290tgza.js} +2 -2
  109. package/dist/{chunk-s4f56035.js.map → chunk-q290tgza.js.map} +1 -1
  110. package/dist/{chunk-wgb79ysr.js → chunk-qf4bmee9.js} +2 -2
  111. package/dist/{chunk-wgb79ysr.js.map → chunk-qf4bmee9.js.map} +1 -1
  112. package/dist/{chunk-a7r39713.js → chunk-qkxnvpaj.js} +2 -2
  113. package/dist/{chunk-a7r39713.js.map → chunk-qkxnvpaj.js.map} +1 -1
  114. package/dist/chunk-r1favzz4.js +19 -0
  115. package/dist/{chunk-rhmpphhc.js.map → chunk-r1favzz4.js.map} +5 -4
  116. package/dist/{chunk-veq07rp8.js → chunk-razjfecn.js} +1 -1
  117. package/dist/{chunk-a77586gv.js → chunk-scc0j5k9.js} +2 -2
  118. package/dist/{chunk-a77586gv.js.map → chunk-scc0j5k9.js.map} +1 -1
  119. package/dist/{chunk-cytss9mb.js → chunk-sce5jes2.js} +2 -2
  120. package/dist/{chunk-cytss9mb.js.map → chunk-sce5jes2.js.map} +1 -1
  121. package/dist/{chunk-t87w4h84.js → chunk-sd02ktf2.js} +2 -2
  122. package/dist/{chunk-t87w4h84.js.map → chunk-sd02ktf2.js.map} +1 -1
  123. package/dist/{chunk-1zzd39qg.js → chunk-sn04cyw0.js} +2 -2
  124. package/dist/{chunk-1zzd39qg.js.map → chunk-sn04cyw0.js.map} +1 -1
  125. package/dist/{chunk-wwdbgshx.js → chunk-tfdmvxza.js} +2 -2
  126. package/dist/{chunk-wwdbgshx.js.map → chunk-tfdmvxza.js.map} +1 -1
  127. package/dist/{chunk-jqrs16g2.js → chunk-tzdenj0n.js} +3 -3
  128. package/dist/{chunk-jqrs16g2.js.map → chunk-tzdenj0n.js.map} +1 -1
  129. package/dist/{chunk-qhw0hej0.js → chunk-x6v2zex2.js} +2 -2
  130. package/dist/{chunk-qhw0hej0.js.map → chunk-x6v2zex2.js.map} +1 -1
  131. package/dist/{chunk-yfwrbfnw.js → chunk-xfw8zyvn.js} +2 -2
  132. package/dist/{chunk-yfwrbfnw.js.map → chunk-xfw8zyvn.js.map} +1 -1
  133. package/dist/{chunk-sksmnjkn.js → chunk-xtzn0qfh.js} +2 -2
  134. package/dist/{chunk-sksmnjkn.js.map → chunk-xtzn0qfh.js.map} +1 -1
  135. package/dist/{chunk-jpetnpzn.js → chunk-xx3zvc3g.js} +2 -2
  136. package/dist/{chunk-jpetnpzn.js.map → chunk-xx3zvc3g.js.map} +1 -1
  137. package/dist/{chunk-fk6nxhxn.js → chunk-xzn2nmny.js} +2 -2
  138. package/dist/{chunk-fk6nxhxn.js.map → chunk-xzn2nmny.js.map} +1 -1
  139. package/dist/{chunk-vtc23xpk.js → chunk-xzyy896s.js} +2 -2
  140. package/dist/{chunk-vtc23xpk.js.map → chunk-xzyy896s.js.map} +1 -1
  141. package/dist/{chunk-fa37qzm3.js → chunk-y09r0wsw.js} +3 -3
  142. package/dist/{chunk-fa37qzm3.js.map → chunk-y09r0wsw.js.map} +1 -1
  143. package/dist/{chunk-5p4z1fgc.js → chunk-ygf0z7kk.js} +2 -2
  144. package/dist/{chunk-5p4z1fgc.js.map → chunk-ygf0z7kk.js.map} +1 -1
  145. package/dist/{chunk-zw6843j3.js → chunk-z759yah5.js} +2 -2
  146. package/dist/{chunk-zw6843j3.js.map → chunk-z759yah5.js.map} +1 -1
  147. package/dist/config/index.js +1 -1
  148. package/dist/console/run.js +2 -2
  149. package/dist/console/run.js.map +1 -1
  150. package/dist/container/index.js +2 -2
  151. package/dist/container/index.js.map +1 -1
  152. package/dist/database/index.js +2 -2
  153. package/dist/database/index.js.map +1 -1
  154. package/dist/email/index.js +2 -2
  155. package/dist/email/index.js.map +1 -1
  156. package/dist/facades/index.js +2 -2
  157. package/dist/facades/index.js.map +1 -1
  158. package/dist/foundation/index.js +2 -2
  159. package/dist/foundation/index.js.map +1 -1
  160. package/dist/http/index.js +2 -2
  161. package/dist/http/index.js.map +1 -1
  162. package/dist/i18n/dictionaryRuntime.js +2 -2
  163. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  164. package/dist/i18n/index.js +2 -2
  165. package/dist/i18n/index.js.map +1 -1
  166. package/dist/kernel/index.js +2 -2
  167. package/dist/kernel/index.js.map +1 -1
  168. package/dist/orm/index.js +2 -2
  169. package/dist/orm/index.js.map +1 -1
  170. package/dist/server/index.js +2 -2
  171. package/dist/server/index.js.map +1 -1
  172. package/dist/services/discovery.d.ts +8 -0
  173. package/dist/services/discovery.d.ts.map +1 -1
  174. package/dist/services/index.d.ts +8 -1
  175. package/dist/services/index.d.ts.map +1 -1
  176. package/dist/services/index.js +3 -3
  177. package/dist/services/index.js.map +2 -2
  178. package/dist/services/queue/DatabaseQueueDriver.d.ts +23 -2
  179. package/dist/services/queue/DatabaseQueueDriver.d.ts.map +1 -1
  180. package/dist/services/queue/Job.d.ts +3 -0
  181. package/dist/services/queue/Job.d.ts.map +1 -1
  182. package/dist/services/queue/MemoryQueueDriver.d.ts +10 -0
  183. package/dist/services/queue/MemoryQueueDriver.d.ts.map +1 -1
  184. package/dist/services/queue/QueueDriver.d.ts +9 -0
  185. package/dist/services/queue/QueueDriver.d.ts.map +1 -1
  186. package/dist/services/queue/QueueManager.d.ts +33 -7
  187. package/dist/services/queue/QueueManager.d.ts.map +1 -1
  188. package/dist/services/queue/QueueServiceProvider.d.ts.map +1 -1
  189. package/dist/services/queue/backoff.d.ts +6 -0
  190. package/dist/services/queue/backoff.d.ts.map +1 -0
  191. package/dist/services/queue/config.d.ts +9 -0
  192. package/dist/services/queue/config.d.ts.map +1 -1
  193. package/dist/services/queue/work.js +2 -2
  194. package/dist/services/queue/work.js.map +1 -1
  195. package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts +89 -0
  196. package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts.map +1 -0
  197. package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts +43 -0
  198. package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts.map +1 -0
  199. package/dist/services/queue/workflow/Step.d.ts +202 -0
  200. package/dist/services/queue/workflow/Step.d.ts.map +1 -0
  201. package/dist/services/queue/workflow/Workflow.d.ts +124 -0
  202. package/dist/services/queue/workflow/Workflow.d.ts.map +1 -0
  203. package/dist/services/queue/workflow/WorkflowRuntime.d.ts +60 -0
  204. package/dist/services/queue/workflow/WorkflowRuntime.d.ts.map +1 -0
  205. package/dist/services/queue/workflow/WorkflowStore.d.ts +184 -0
  206. package/dist/services/queue/workflow/WorkflowStore.d.ts.map +1 -0
  207. package/dist/services/queue/workflow/duration.d.ts +8 -0
  208. package/dist/services/queue/workflow/duration.d.ts.map +1 -0
  209. package/dist/services/queue/workflow/workflowContract.d.ts +30 -0
  210. package/dist/services/queue/workflow/workflowContract.d.ts.map +1 -0
  211. package/dist/stats/route-table.js +1 -1
  212. package/dist/support/index.js +2 -2
  213. package/dist/support/index.js.map +1 -1
  214. package/dist/vitest/index.js +1 -1
  215. package/package.json +1 -1
  216. package/dist/chunk-2czfefn2.js +0 -10
  217. package/dist/chunk-63ewmmhc.js +0 -5
  218. package/dist/chunk-rhmpphhc.js +0 -19
  219. package/dist/chunk-y0en07zh.js +0 -302
  220. package/dist/chunk-y0en07zh.js.map +0 -17
  221. /package/dist/{chunk-077rea02.js.map → chunk-33s2xqv1.js.map} +0 -0
  222. /package/dist/{chunk-bvqae0px.js.map → chunk-8t6dwwz6.js.map} +0 -0
  223. /package/dist/{chunk-e7ezmag9.js.map → chunk-aedkrck1.js.map} +0 -0
  224. /package/dist/{chunk-vj5necm0.js.map → chunk-nrezmscd.js.map} +0 -0
  225. /package/dist/{chunk-veq07rp8.js.map → chunk-razjfecn.js.map} +0 -0
@@ -3,6 +3,7 @@ import type { Dialect } from "../../database/dialect";
3
3
  import { DatabaseLockStore } from "../lock/DatabaseLockStore";
4
4
  import { type BatchStatus } from "./batch";
5
5
  import type { ClaimOptions, ClaimedJob, EnqueueBatch, EnqueueJob, JobFailure, JobRelease, QueueDriver } from "./QueueDriver";
6
+ import { DatabaseWorkflowStore } from "./workflow/DatabaseWorkflowStore";
6
7
  export type DatabaseQueueDriverOptions = {
7
8
  /**
8
9
  * The jobs table. Default `gemi_jobs`. A plain identifier — letters, digits
@@ -16,6 +17,14 @@ export type DatabaseQueueDriverOptions = {
16
17
  * the batch methods.
17
18
  */
18
19
  batchTable?: string;
20
+ /**
21
+ * The tables workflows are kept in. Default `gemi_workflows` and
22
+ * `gemi_workflow_steps` beside `gemi_jobs`, and `<table>_workflows` and
23
+ * `<table>_workflow_steps` beside a jobs table of another name. Plain
24
+ * identifiers, like `table`. Only touched by `Workflow`.
25
+ */
26
+ workflowTable?: string;
27
+ workflowStepTable?: string;
19
28
  /**
20
29
  * SQLite only: how long, in milliseconds, a statement waits for another
21
30
  * process's write lock before failing with `SQLITE_BUSY`. Default `1000`.
@@ -98,6 +107,9 @@ export type DatabaseJobStatus = "pending" | "claimed" | "dead";
98
107
  export declare class DatabaseQueueDriver implements QueueDriver {
99
108
  readonly table: string;
100
109
  readonly batchTable: string;
110
+ readonly workflowTable: string;
111
+ readonly workflowStepTable: string;
112
+ private workflows;
101
113
  private readonly sql;
102
114
  private readonly dialect;
103
115
  /** The connection's name, when it came with one; see `transaction`. */
@@ -138,8 +150,9 @@ export declare class DatabaseQueueDriver implements QueueDriver {
138
150
  */
139
151
  private configure;
140
152
  /**
141
- * Creates the jobs table, the batches table and their indexes if they do
142
- * not exist — the same DDL Prisma generates for the models in the docs, so
153
+ * Creates the jobs table, the batches table, the two workflow tables and
154
+ * their indexes if they do not exist — the same DDL Prisma generates for
155
+ * the models in the docs, so
143
156
  * a table made either way is the table the other expects — and adds the
144
157
  * batch columns to a jobs table from before batches. For tests and for an
145
158
  * app that does not manage its schema with Prisma; one that does should add
@@ -211,6 +224,14 @@ export declare class DatabaseQueueDriver implements QueueDriver {
211
224
  progress?: boolean;
212
225
  }): Promise<BatchStatus | null>;
213
226
  cancelBatch(id: string): Promise<boolean>;
227
+ /** `cancelBatch`, inside a transaction the caller has open. */
228
+ private cancelBatchOn;
229
+ /**
230
+ * Workflows (#846), in `workflowTable` and `workflowStepTable` of this
231
+ * driver's database. Their writes share this driver's transactions, so a
232
+ * step's record and the tick or batch it schedules commit together.
233
+ */
234
+ workflowStore(): DatabaseWorkflowStore;
214
235
  reportProgress(job: ClaimedJob, progress: number): Promise<void>;
215
236
  /**
216
237
  * Deletes batches that finished more than `olderThanMs` ago, and resolves
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseQueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/DatabaseQueueDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatabaseQueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/DatabaseQueueDriver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type BatchStatus, type JobCall } from "./batch";
2
+ import type { ClaimedJob } from "./QueueDriver";
2
3
  import { type DispatchedBatch, type JobBatchOptions } from "./QueueManager";
3
4
  /** `this.batch` inside a job dispatched with `dispatchBatch`. */
4
5
  export type JobBatch = {
@@ -89,6 +90,8 @@ export declare class Job {
89
90
  progress(value: number): Promise<void>;
90
91
  /** @internal Where `progress` writes; set by the queue for a job of a batch. */
91
92
  $progress: ((value: number) => Promise<void>) | undefined;
93
+ /** @internal The claim this run is, set by the queue before `run`. */
94
+ $claimed: ClaimedJob | undefined;
92
95
  /** @internal What `release` or `fail` asked for during this run. */
93
96
  $outcome: {
94
97
  kind: "release";
@@ -1 +1 @@
1
- {"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../../../services/queue/Job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../../../services/queue/Job.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type BatchStatus } from "./batch";
2
2
  import type { ClaimOptions, ClaimedJob, EnqueueBatch, EnqueueJob, JobFailure, JobRelease, QueueDriver } from "./QueueDriver";
3
+ import type { WorkflowStore } from "./workflow/WorkflowStore";
3
4
  /**
4
5
  * The default driver: a Map in this process's memory.
5
6
  *
@@ -34,6 +35,7 @@ import type { ClaimOptions, ClaimedJob, EnqueueBatch, EnqueueJob, JobFailure, Jo
34
35
  export declare class MemoryQueueDriver implements QueueDriver {
35
36
  private entries;
36
37
  private batches;
38
+ private workflows;
37
39
  private listeners;
38
40
  private timer;
39
41
  private timerAt;
@@ -45,10 +47,18 @@ export declare class MemoryQueueDriver implements QueueDriver {
45
47
  enqueue(job: EnqueueJob): Promise<string>;
46
48
  private add;
47
49
  enqueueBatch(batch: EnqueueBatch): Promise<void>;
50
+ /** `enqueueBatch`, synchronously, for the workflow store too. */
51
+ private recordBatch;
48
52
  findBatch(id: string, options?: {
49
53
  progress?: boolean;
50
54
  }): Promise<BatchStatus | null>;
51
55
  cancelBatch(id: string): Promise<boolean>;
56
+ private cancelBatchNow;
57
+ /**
58
+ * Workflows (#846), kept in memory beside the jobs and lost with them. The
59
+ * store's writes, ticks and batches included, happen synchronously here.
60
+ */
61
+ workflowStore(): WorkflowStore;
52
62
  reportProgress(job: ClaimedJob, progress: number): Promise<void>;
53
63
  claim(limit: number, options: ClaimOptions): Promise<ClaimedJob[]>;
54
64
  complete(job: ClaimedJob): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryQueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/MemoryQueueDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAQjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,eAAe,CAAC;AAoBvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,GAAG,CAAK;IAEhB,8DAA8D;IAC9D,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEK,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/C,OAAO,CAAC,GAAG;IAsBL,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWxF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzC,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBlE,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBzD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IASzE,2DAA2D;IAC3D,OAAO,CAAC,KAAK;IAcb,2EAA2E;IAC3E,OAAO,CAAC,IAAI;IAMZ,oEAAoE;IACpE,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,qBAAqB;IAQ7B,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKvC;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,IAAI;IAIZ,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;CAoBjB"}
1
+ {"version":3,"file":"MemoryQueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/MemoryQueueDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAQjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAoB9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,GAAG,CAAK;IAEhB,8DAA8D;IAC9D,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEK,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/C,OAAO,CAAC,GAAG;IAsBL,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,iEAAiE;IACjE,OAAO,CAAC,WAAW;IAYb,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWxF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,aAAa,IAAI,aAAa;IAYxB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBlE,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBzD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IASzE,2DAA2D;IAC3D,OAAO,CAAC,KAAK;IAcb,2EAA2E;IAC3E,OAAO,CAAC,IAAI;IAMZ,oEAAoE;IACpE,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,qBAAqB;IAQ7B,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKvC;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,IAAI;IAIZ,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;CAoBjB"}
@@ -42,6 +42,7 @@
42
42
  */
43
43
  import type { LockStore } from "../lock/LockStore";
44
44
  import type { BatchCallbacks, BatchStatus } from "./batch";
45
+ import type { WorkflowStore } from "./workflow/WorkflowStore";
45
46
  export interface QueueDriver {
46
47
  /**
47
48
  * Records a job and returns its id. The job is claimable once `delayMs` has
@@ -189,6 +190,14 @@ export interface QueueDriver {
189
190
  * `progress`. A stale claim's report is ignored.
190
191
  */
191
192
  reportProgress?(job: ClaimedJob, progress: number): Promise<void>;
193
+ /**
194
+ * Where `Workflow` keeps its workflows and steps (#846), over the same
195
+ * storage, so that a workflow's writes and the jobs and batches they
196
+ * schedule are recorded in one atomic step. Optional; a driver without it
197
+ * cannot run workflows. Called once per manager. A driver that has it also
198
+ * needs the batch methods for `step.batch`.
199
+ */
200
+ workflowStore?(): WorkflowStore;
192
201
  }
193
202
  export type EnqueueBatch = {
194
203
  /** The id to record the batch under. Chosen by the manager. */
@@ -1 +1 @@
1
- {"version":3,"file":"QueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueueDriver.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueDriver.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,12 @@ import type { Application } from "../../foundation/Application";
2
2
  import { LockManager } from "../lock/LockManager";
3
3
  import { Job } from "./Job";
4
4
  import { type QueueConfig } from "./config";
5
- import type { ClaimedJob, QueueDriver } from "./QueueDriver";
5
+ import type { ClaimedJob, EnqueueBatch, QueueDriver } from "./QueueDriver";
6
6
  import type { BatchStatus, JobCall } from "./batch";
7
+ import { backoffFor } from "./backoff";
8
+ import type { WorkflowClass } from "./workflow/Workflow";
9
+ import { WorkflowRuntime } from "./workflow/WorkflowRuntime";
10
+ export { backoffFor };
7
11
  declare global {
8
12
  /**
9
13
  * The queue loop a `gemi dev` server is running over a driver that outlives
@@ -86,6 +90,7 @@ export declare class QueueManager {
86
90
  /** Unknown names already reported as left for another replica; see `run`. */
87
91
  private readonly releasedNames;
88
92
  private lockManager;
93
+ private workflowRuntime;
89
94
  /**
90
95
  * `application` is entered around every job, so `app()` inside one resolves
91
96
  * to it rather than to whichever application happens to be the static
@@ -115,6 +120,24 @@ export declare class QueueManager {
115
120
  * unaffected, because that list is already in place by the end of `register()`.
116
121
  */
117
122
  useJobs(jobs: Array<new () => Job>): void;
123
+ /**
124
+ * Replaces the registered workflows, for the provider to hand over what it
125
+ * found under `app/workflows`. With at least one, the internal job their
126
+ * passes run in is registered too. See `Workflow`.
127
+ */
128
+ useWorkflows(workflows: WorkflowClass[]): void;
129
+ /** The registered workflow classes, as handed over. */
130
+ get registeredWorkflows(): ReadonlyArray<WorkflowClass>;
131
+ /**
132
+ * Workflows (#846) over this queue's driver: what `Workflow.start`,
133
+ * `signal`, `find` and `cancel` call.
134
+ */
135
+ get workflows(): WorkflowRuntime;
136
+ /**
137
+ * The tick job, beside the app's own, once there is a workflow to tick.
138
+ * Not in `registeredJobs`, which reports what the app handed over.
139
+ */
140
+ private registerTickJob;
118
141
  /**
119
142
  * Registers one more job beside whatever `useJobs` already took.
120
143
  *
@@ -199,6 +222,13 @@ export declare class QueueManager {
199
222
  * held and recorded at the commit, resolving at once to the id it will have.
200
223
  */
201
224
  pushBatch(job: new () => Job, args: string[], options?: JobBatchOptions): Promise<DispatchedBatch>;
225
+ /**
226
+ * @internal The batch `pushBatch` records, checked: for `pushBatch` and for
227
+ * a workflow's `step.batch`, which records it in a write of its own. Throws
228
+ * on the caller's stack for a driver without batches, a worker job, a
229
+ * unique job and a callback that is not a job call.
230
+ */
231
+ buildBatch(job: new () => Job, args: string[], options?: JobBatchOptions): EnqueueBatch;
202
232
  /** `pushBatch`, once it is known that the batch is recorded now; see `record`. */
203
233
  private recordBatch;
204
234
  /** The batch's status, or `null` for an unknown id. See `Job.findBatch`. */
@@ -269,7 +299,8 @@ export declare class QueueManager {
269
299
  * For a job the driver has just made claimable: start the loop, or wake a
270
300
  * running one that only polls, as `push` does for a dispatch.
271
301
  */
272
- private claimSoon;
302
+ /** @internal */
303
+ claimSoon(): void;
273
304
  /**
274
305
  * Starts claiming. Idempotent, and called by the first `push`, so an app
275
306
  * does not need to; it is public for a process that should run jobs it
@@ -393,9 +424,4 @@ export declare function claimingTurnedOff(env?: Record<string, string | undefine
393
424
  /** Marks this process as a `gemi queue:work` worker; see `claimsInThisProcess`. */
394
425
  export declare function markQueueWorker(worker?: boolean): void;
395
426
  export declare function isQueueWorker(): boolean;
396
- /**
397
- * The delay before the retry that follows attempt `attempt`: the number
398
- * itself, or the array's entry for that retry with its last entry repeated.
399
- */
400
- export declare function backoffFor(backoff: number | number[], attempt: number): number;
401
427
  //# sourceMappingURL=QueueManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueManager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"QueueServiceProvider.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueServiceProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAyBhE,qBAAa,oBAAqB,SAAQ,eAAe;IACvD,QAAQ;IAYR;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,IAAI;IAQV;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;CAqB/C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,QAO9D"}
1
+ {"version":3,"file":"QueueServiceProvider.d.ts","sourceRoot":"","sources":["../../../services/queue/QueueServiceProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAyBhE,qBAAa,oBAAqB,SAAQ,eAAe;IACvD,QAAQ;IAYR;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,IAAI;IAcV;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;CAqB/C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,QAO9D"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The delay before the retry that follows attempt `attempt`: the number
3
+ * itself, or the array's entry for that retry with its last entry repeated.
4
+ */
5
+ export declare function backoffFor(backoff: number | number[], attempt: number): number;
6
+ //# sourceMappingURL=backoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backoff.d.ts","sourceRoot":"","sources":["../../../services/queue/backoff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAKrE"}
@@ -2,6 +2,7 @@ import type { Application } from "../../foundation/Application";
2
2
  import type { Job } from "./Job";
3
3
  import type { LockStore } from "../lock/LockStore";
4
4
  import type { QueueDriver } from "./QueueDriver";
5
+ import type { WorkflowClass } from "./workflow/Workflow";
5
6
  export interface QueueConfig {
6
7
  /**
7
8
  * The `Job` subclasses this application dispatches, or nothing.
@@ -45,6 +46,14 @@ export interface QueueConfig {
45
46
  * jobs is what this field is for; pointing it at `app/` is not.
46
47
  */
47
48
  jobsDir?: string;
49
+ /**
50
+ * The `Workflow` subclasses this application runs, or nothing, by the same
51
+ * rule as `jobs`: declared (including `[]`) is used as given, and absent
52
+ * discovers the classes under `workflowsDir`.
53
+ */
54
+ workflows?: WorkflowClass[];
55
+ /** Where to look when `workflows` was not declared. Default `app/workflows`. */
56
+ workflowsDir?: string;
48
57
  concurrency?: number;
49
58
  /**
50
59
  * Where queued jobs are kept: `"memory"`, `"database"`, a `QueueDriver`, or
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../services/queue/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAE5B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,EACH,QAAQ,GACR,UAAU,GACV,WAAW,GACX,CAAC,CAAC,WAAW,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EACF,MAAM,GACN,QAAQ,GACR,UAAU,GACV,SAAS,GACT,CAAC,CAAC,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAElE;AAED,wBAAgB,mBAAmB,IAAI,QAAQ,CAAC,WAAW,CAAC,CAW3D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../services/queue/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAE5B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAE5B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,EACH,QAAQ,GACR,UAAU,GACV,WAAW,GACX,CAAC,CAAC,WAAW,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EACF,MAAM,GACN,QAAQ,GACR,UAAU,GACV,SAAS,GACT,CAAC,CAAC,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAElE;AAED,wBAAgB,mBAAmB,IAAI,QAAQ,CAAC,WAAW,CAAC,CAa3D"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Gc as E,Jc as T}from"../../chunk-y0en07zh.js";import"../../chunk-jpetnpzn.js";import"../../chunk-dz99g58c.js";import"../../chunk-t65074mw.js";import"../../chunk-5w6kyxsj.js";import"../../chunk-076jezzg.js";import"../../chunk-wk1tp1f1.js";import{Ki as I,Li as J,Oi as O}from"../../chunk-a32wfzdq.js";import{Si as N}from"../../chunk-8gtc3s1y.js";import"../../chunk-dcgvq79a.js";import L from"path";class F extends Error{name="QueueWorkerRefused"}class H{kernel;stopping;keepAlive;settings;constructor(y,z={}){this.kernel=y;this.settings={...J(),...z}}async start(){if(await this.kernel.waitForBoot(),this.stopping)return;let y=this.kernel.app;if(!y.bound(E))throw new F("[gemi] `gemi queue:work` has no queue to claim from: this application does not register QueueServiceProvider.");let z=y.make(E);if(!z.durable)throw new F('[gemi] `gemi queue:work` refuses to start: the queue uses the memory driver, which keeps each job in the process that dispatched it, so a worker never sees one. Set `driver: "database"` (or another driver every process can reach) in app/config/queue.ts, or run jobs in the server and drop the worker.');z.start(),this.keepAlive=setInterval(()=>{},1073741824),console.log(`[gemi] Queue worker started: claiming up to ${z.config.concurrency} job(s) at a time.`)}stop(y={}){return this.stopping??=this.drain({...this.settings,...y}),this.stopping}async drain(y){I();let z=this.kernel.app,A=z.resolved(E)?z.make(E):void 0;if(A)console.log(`[gemi] Shutting down: waiting for ${A.running} running job(s) (up to ${y.timeoutMs/1000}s).`),await A.drain(y.timeoutMs);let B=await this.kernel.shutdown({timeoutMs:y.providerTimeoutMs});clearInterval(this.keepAlive);let C=(A?.running??0)===0&&B.failed.length===0&&B.timedOut.length===0;return console.log(`[gemi] Shutdown ${C?"complete":"finished with errors"}.`),C?0:1}}async function U(){let y=N();process.env.ROOT_DIR=y,process.env.APP_DIR=L.join(y,"app"),T();let z=L.join(y,"app/kernel/Kernel.ts"),{default:A}=await import(z);if(typeof A!=="function")return console.error(`[gemi] ${z} has no default export to boot the worker from.`),1;let B=new A;B.boot();let C=new H(B);O(()=>C.stop());try{await C.start()}catch(G){if(!(G instanceof F))throw G;return console.error(G.message),1}return}U().then((y)=>{if(y!==void 0)process.exit(y)},(y)=>{console.error("[gemi] The queue worker failed to start:",y),process.exit(1)});
2
+ import{Rc as E,Uc as T}from"../../chunk-nang3847.js";import"../../chunk-xx3zvc3g.js";import"../../chunk-gqfqnv3f.js";import"../../chunk-kkte8nze.js";import"../../chunk-hr1r3g0d.js";import"../../chunk-g5ppst76.js";import"../../chunk-d806cy7p.js";import{Vi as I,Wi as J,Zi as O}from"../../chunk-8wcpxm41.js";import{bj as N}from"../../chunk-jg79n382.js";import"../../chunk-hm9cjxy2.js";import L from"path";class F extends Error{name="QueueWorkerRefused"}class H{kernel;stopping;keepAlive;settings;constructor(y,z={}){this.kernel=y;this.settings={...J(),...z}}async start(){if(await this.kernel.waitForBoot(),this.stopping)return;let y=this.kernel.app;if(!y.bound(E))throw new F("[gemi] `gemi queue:work` has no queue to claim from: this application does not register QueueServiceProvider.");let z=y.make(E);if(!z.durable)throw new F('[gemi] `gemi queue:work` refuses to start: the queue uses the memory driver, which keeps each job in the process that dispatched it, so a worker never sees one. Set `driver: "database"` (or another driver every process can reach) in app/config/queue.ts, or run jobs in the server and drop the worker.');z.start(),this.keepAlive=setInterval(()=>{},1073741824),console.log(`[gemi] Queue worker started: claiming up to ${z.config.concurrency} job(s) at a time.`)}stop(y={}){return this.stopping??=this.drain({...this.settings,...y}),this.stopping}async drain(y){I();let z=this.kernel.app,A=z.resolved(E)?z.make(E):void 0;if(A)console.log(`[gemi] Shutting down: waiting for ${A.running} running job(s) (up to ${y.timeoutMs/1000}s).`),await A.drain(y.timeoutMs);let B=await this.kernel.shutdown({timeoutMs:y.providerTimeoutMs});clearInterval(this.keepAlive);let C=(A?.running??0)===0&&B.failed.length===0&&B.timedOut.length===0;return console.log(`[gemi] Shutdown ${C?"complete":"finished with errors"}.`),C?0:1}}async function U(){let y=N();process.env.ROOT_DIR=y,process.env.APP_DIR=L.join(y,"app"),T();let z=L.join(y,"app/kernel/Kernel.ts"),{default:A}=await import(z);if(typeof A!=="function")return console.error(`[gemi] ${z} has no default export to boot the worker from.`),1;let B=new A;B.boot();let C=new H(B);O(()=>C.stop());try{await C.start()}catch(G){if(!(G instanceof F))throw G;return console.error(G.message),1}return}U().then((y)=>{if(y!==void 0)process.exit(y)},(y)=>{console.error("[gemi] The queue worker failed to start:",y),process.exit(1)});
3
3
 
4
- //# debugId=71570968BCFFF1AB64756E2164756E21
4
+ //# debugId=FAD23F28132E03B464756E2164756E21
@@ -6,6 +6,6 @@
6
6
  "import type { Application, ShutdownReport } from \"../../foundation/Application\";\nimport { markShuttingDown, shutdownSettings, type ShutdownSettings } from \"../../server/shutdown\";\nimport { QueueManager } from \"./QueueManager\";\n\n/** The part of a `Kernel` a worker drives. */\nexport type WorkerKernel = {\n readonly app: Application;\n waitForBoot(): Promise<void>;\n shutdown(options?: { timeoutMs?: number }): Promise<ShutdownReport>;\n};\n\n/**\n * A worker that was told to start in an application it cannot claim for. The\n * message is written for the operator reading the deploy's logs.\n */\nexport class QueueWorkerRefused extends Error {\n name = \"QueueWorkerRefused\";\n}\n\n/**\n * The process `gemi queue:work` runs: the application booted as a server boots\n * it, claiming from the queue, and no `Bun.serve`. It exists so job capacity\n * can be scaled apart from request traffic, which needs a driver both kinds of\n * process can reach; see `start` for why the memory driver is refused.\n *\n * The caller marks the process as a worker (`markQueueWorker`) before the\n * kernel registers, so every claim rule that asks `claimsInThisProcess` sees a\n * process that claims, whatever `GEMI_QUEUE_CLAIM` says.\n */\nexport class QueueWorker {\n private stopping: Promise<number> | undefined;\n private keepAlive: ReturnType<typeof setInterval> | undefined;\n private readonly settings: ShutdownSettings;\n\n /**\n * `settings` default to the `GEMI_SHUTDOWN_*` variables, read here rather\n * than at the signal so a bad value is warned about while the deploy is\n * being watched, as `Server.start` does.\n */\n constructor(\n private readonly kernel: WorkerKernel,\n settings: Partial<ShutdownSettings> = {},\n ) {\n this.settings = { ...shutdownSettings(), ...settings };\n }\n\n /**\n * Boots the application and starts claiming. Rejects with\n * `QueueWorkerRefused` when the application has no queue, or its queue uses\n * the memory driver.\n *\n * Refused rather than warned about, because a memory worker can never do\n * anything: its jobs live in a `Map` in the process that dispatched them,\n * so a worker's is always empty. Left running, it looks like a healthy\n * deploy — a process up, no errors — that runs nothing, and scaling it out\n * adds no capacity. An exit the platform reports as a crash loop is a form\n * of the mistake someone will see.\n */\n async start(): Promise<void> {\n await this.kernel.waitForBoot();\n // A signal during the boot has already drained and cleared the handle\n // below. Going on would start the loop again and arm a handle nothing\n // clears, holding open a worker that has finished shutting down.\n if (this.stopping) return;\n\n const application = this.kernel.app;\n // `bound`, not `make` in a try: an application built without the queue\n // provider is a configuration to name, not an unbound-token stack trace.\n if (!application.bound(QueueManager)) {\n throw new QueueWorkerRefused(\n \"[gemi] `gemi queue:work` has no queue to claim from: this application \" +\n \"does not register QueueServiceProvider.\",\n );\n }\n const queue = application.make(QueueManager);\n if (!queue.durable) {\n throw new QueueWorkerRefused(\n \"[gemi] `gemi queue:work` refuses to start: the queue uses the memory \" +\n \"driver, which keeps each job in the process that dispatched it, so \" +\n 'a worker never sees one. Set `driver: \"database\"` (or another driver ' +\n \"every process can reach) in app/config/queue.ts, or run jobs in the \" +\n \"server and drop the worker.\",\n );\n }\n\n // Idempotent: a production boot with a durable driver has already started\n // it (`startClaimingIfServing`). Development has not, and a worker claims\n // in either.\n queue.start();\n // The queue's poll timer is unref'd, so that a script's queue does not\n // hold it open; here the queue is the process, and without a handle of its\n // own an idle worker would exit 0 as soon as it booted.\n this.keepAlive = setInterval(() => {}, 1 << 30);\n console.log(\n `[gemi] Queue worker started: claiming up to ${queue.config.concurrency} job(s) at a time.`,\n );\n }\n\n /**\n * Stops claiming, waits for the running jobs, runs every provider's\n * `shutdown()`, and resolves with the exit code: 0 when no job was left\n * running and every provider finished in time, 1 otherwise. Idempotent.\n *\n * `gemi start`'s drain, with the jobs where the requests were:\n * `isShuttingDown()` turns true, which stops a durable queue claiming;\n * running jobs get `timeoutMs` (`GEMI_SHUTDOWN_TIMEOUT`), which a server\n * spends on requests; then `Application.shutdown` gets `providerTimeoutMs`,\n * and in it the queue provider waits for whatever is still running and\n * names it. The two budgets add up as they do for a server, so a worker\n * fits the same grace period. `delayMs` is not waited: it is for a load\n * balancer, and nothing routes to a worker.\n */\n stop(settings: Partial<ShutdownSettings> = {}): Promise<number> {\n this.stopping ??= this.drain({ ...this.settings, ...settings });\n return this.stopping;\n }\n\n private async drain(settings: ShutdownSettings): Promise<number> {\n markShuttingDown();\n const application = this.kernel.app;\n // Resolving the manager now would build a driver only to stop it, which\n // is what a signal during the boot, before the provider resolved it, finds.\n const queue = application.resolved(QueueManager) ? application.make(QueueManager) : undefined;\n if (queue) {\n console.log(\n `[gemi] Shutting down: waiting for ${queue.running} running job(s) ` +\n `(up to ${settings.timeoutMs / 1000}s).`,\n );\n await queue.drain(settings.timeoutMs);\n }\n\n const report = await this.kernel.shutdown({ timeoutMs: settings.providerTimeoutMs });\n clearInterval(this.keepAlive);\n const clean =\n (queue?.running ?? 0) === 0 && report.failed.length === 0 && report.timedOut.length === 0;\n console.log(`[gemi] Shutdown ${clean ? \"complete\" : \"finished with errors\"}.`);\n return clean ? 0 : 1;\n }\n}\n"
7
7
  ],
8
8
  "mappings": ";iZAYA,kBCGO,IAAM,QAA2B,GAAM,DAC5C,GAAO,kBACT,DAYO,IAAM,CAAY,CAWJ,OAVX,SACA,UACS,SAOjB,WAAW,CACQ,EACjB,EAAsC,CAAC,EACvC,CAFiB,cAGjB,KAAK,SAAW,IAAK,EAAiB,KAAM,CAAS,OAejD,MAAK,EAAkB,CAK3B,GAJA,MAAM,KAAK,OAAO,YAAY,EAI1B,KAAK,SAAU,OAEnB,IAAM,EAAc,KAAK,OAAO,IAGhC,GAAI,CAAC,EAAY,MAAM,CAAY,EACjC,MAAM,IAAI,EACR,+GAEF,EAEF,IAAM,EAAQ,EAAY,KAAK,CAAY,EAC3C,GAAI,CAAC,EAAM,QACT,MAAM,IAAI,EACR,8SAKF,EAMF,EAAM,MAAM,EAIZ,KAAK,UAAY,YAAY,IAAM,GAAI,UAAO,EAC9C,QAAQ,IACN,+CAA+C,EAAM,OAAO,+BAC9D,EAiBF,IAAI,CAAC,EAAsC,CAAC,EAAoB,CAE9D,OADA,KAAK,WAAa,KAAK,MAAM,IAAK,KAAK,YAAa,CAAS,CAAC,EACvD,KAAK,cAGA,MAAK,CAAC,EAA6C,CAC/D,EAAiB,EACjB,IAAM,EAAc,KAAK,OAAO,IAG1B,EAAQ,EAAY,SAAS,CAAY,EAAI,EAAY,KAAK,CAAY,EAAI,OACpF,GAAI,EACF,QAAQ,IACN,qCAAqC,EAAM,iCAC/B,EAAS,UAAY,SACnC,EACA,MAAM,EAAM,MAAM,EAAS,SAAS,EAGtC,IAAM,EAAS,MAAM,KAAK,OAAO,SAAS,CAAE,UAAW,EAAS,iBAAkB,CAAC,EACnF,cAAc,KAAK,SAAS,EAC5B,IAAM,GACH,GAAO,SAAW,KAAO,GAAK,EAAO,OAAO,SAAW,GAAK,EAAO,SAAS,SAAW,EAE1F,OADA,QAAQ,IAAI,mBAAmB,EAAQ,WAAa,yBAAyB,EACtE,EAAQ,EAAI,EAEvB,CDvHA,eAAe,CAAI,EAAgC,CACjD,IAAM,EAAU,EAAY,EAI5B,QAAQ,IAAI,SAAW,EACvB,QAAQ,IAAI,QAAU,EAAK,KAAK,EAAS,KAAK,EAE9C,EAAgB,EAEhB,IAAM,EAAa,EAAK,KAAK,EAAS,sBAAsB,GACpD,QAAS,GAAY,MAAa,UAG1C,GAAI,OAAO,IAAW,WAEpB,OADA,QAAQ,MAAM,UAAU,kDAA2D,EAC5E,EAET,IAAM,EAAS,IAAI,EACnB,EAAO,KAAK,EAEZ,IAAM,EAAS,IAAI,EAAY,CAAM,EAKrC,EAAuB,IAAM,EAAO,KAAK,CAAC,EAE1C,GAAI,CACF,MAAM,EAAO,MAAM,EACnB,MAAO,EAAO,CACd,GAAI,EAAE,aAAiB,GAAqB,MAAM,EAElD,OADA,QAAQ,MAAM,EAAM,OAAO,EACpB,EAGT,OAGF,EAAK,EAAE,KACL,CAAC,IAAS,CACR,GAAI,IAAS,OAAW,QAAQ,KAAK,CAAI,GAE3C,CAAC,IAAU,CACT,QAAQ,MAAM,2CAA4C,CAAK,EAC/D,QAAQ,KAAK,CAAC,EAElB",
9
- "debugId": "71570968BCFFF1AB64756E2164756E21",
9
+ "debugId": "FAD23F28132E03B464756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -0,0 +1,89 @@
1
+ import type { SQL, TransactionSQL } from "bun";
2
+ import type { Dialect } from "../../../database/dialect";
3
+ import type { EnqueueBatch, EnqueueJob } from "../QueueDriver";
4
+ import { type AcquireResult, type WorkflowChange, type WorkflowSnapshot, type WorkflowState, type WorkflowStore } from "./WorkflowStore";
5
+ /** A SQL fragment, as the driver's helpers build them. */
6
+ type Fragment = ReturnType<SQL["unsafe"]>;
7
+ /**
8
+ * What the database queue driver lends its workflow store: its connection,
9
+ * its transactions and clock, and the writes a workflow's changes schedule.
10
+ * The driver builds it from its private methods, so the two share one
11
+ * transaction per change.
12
+ */
13
+ export type DatabaseQueueInternals = {
14
+ sql: SQL;
15
+ dialect: Dialect;
16
+ connection: string | undefined;
17
+ configure(): Promise<void>;
18
+ atomically<T>(fn: (q: SQL) => Promise<T>): Promise<T>;
19
+ transaction(): TransactionSQL | undefined;
20
+ now(q: SQL): Fragment;
21
+ ms(q: SQL, value: number): Fragment;
22
+ timeOrNull(q: SQL, value: number | null): Fragment;
23
+ fraction(q: SQL, value: number): Fragment;
24
+ clock(q: SQL): Promise<number>;
25
+ insertJob(q: SQL, job: EnqueueJob): Promise<string>;
26
+ insertBatch(q: SQL, batch: EnqueueBatch): Promise<void>;
27
+ cancelBatch(q: SQL, id: string): Promise<boolean>;
28
+ quoted(identifier: string): string;
29
+ };
30
+ /**
31
+ * Workflows in two tables of the queue's database: one row per workflow, and
32
+ * one per step, keyed by the workflow and the step's key.
33
+ *
34
+ * Every change runs in a transaction that locks the workflow's row first
35
+ * (`SELECT … FOR UPDATE` on Postgres and MySQL; a no-op write on SQLite, which
36
+ * takes the file's write lock), reads what the change depends on, and writes
37
+ * it together with any tick job or batch it schedules. The queue's batch
38
+ * transactions lock a batch row and then job rows and never a workflow row,
39
+ * so the two kinds cannot deadlock on each other.
40
+ */
41
+ export declare class DatabaseWorkflowStore implements WorkflowStore {
42
+ private readonly db;
43
+ readonly table: string;
44
+ readonly stepTable: string;
45
+ constructor(db: DatabaseQueueInternals, options: {
46
+ table: string;
47
+ stepTable: string;
48
+ });
49
+ joinsTransaction(): boolean;
50
+ create(workflow: {
51
+ id: string;
52
+ name: string;
53
+ args: string;
54
+ }): Promise<void>;
55
+ private insertWorkflow;
56
+ find(id: string, options?: {
57
+ steps?: boolean;
58
+ }): Promise<WorkflowState | null>;
59
+ acquire(id: string, owner: string, leaseMs: number): Promise<AcquireResult>;
60
+ renew(id: string, owner: string, leaseMs: number): Promise<boolean>;
61
+ update<T>(id: string, options: {
62
+ owner?: string;
63
+ key?: string;
64
+ allSteps?: boolean;
65
+ }, decide: (snapshot: WorkflowSnapshot) => WorkflowChange<T>): Promise<T | undefined>;
66
+ prune(olderThanMs: number): Promise<number>;
67
+ private writeStep;
68
+ /**
69
+ * Reads the workflow's row and holds it until the transaction ends, as the
70
+ * driver's `lockBatch` holds a batch's.
71
+ */
72
+ private lock;
73
+ private stepOf;
74
+ private stepsOf;
75
+ private workflows;
76
+ private steps;
77
+ /** `key` is a reserved word in MySQL. */
78
+ private keyColumn;
79
+ }
80
+ /**
81
+ * The two workflow tables, as Prisma generates them for the `GemiWorkflow`
82
+ * and `GemiWorkflowStep` models in the docs (checked against `prisma migrate
83
+ * diff` for all three providers), with `IF NOT EXISTS` added. MySQL cannot
84
+ * say that of an index, so its index is declared inside the table, which is
85
+ * also where Prisma puts it.
86
+ */
87
+ export declare function createWorkflowTableStatements(dialect: Dialect, table: string, stepTable: string): string[];
88
+ export {};
89
+ //# sourceMappingURL=DatabaseWorkflowStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseWorkflowStore.d.ts","sourceRoot":"","sources":["../../../../services/queue/workflow/DatabaseWorkflowStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { EnqueueBatch, EnqueueJob } from "../QueueDriver";
2
+ import { type AcquireResult, type StepRecord, type WorkflowChange, type WorkflowRecord, type WorkflowState, type WorkflowStore } from "./WorkflowStore";
3
+ /** What the memory driver lends its workflow store: its own writes, done synchronously. */
4
+ export type MemoryQueueWrites = {
5
+ enqueue(job: EnqueueJob): void;
6
+ enqueueBatch(batch: EnqueueBatch): void;
7
+ cancelBatch(id: string): void;
8
+ };
9
+ /**
10
+ * Workflows in this process's memory, beside the memory driver's jobs, and
11
+ * lost with them when the process exits. Every change happens synchronously
12
+ * inside the call that makes it, so it is atomic without further care.
13
+ */
14
+ export declare class MemoryWorkflowStore implements WorkflowStore {
15
+ private readonly queue;
16
+ private workflows;
17
+ private steps;
18
+ constructor(queue: MemoryQueueWrites);
19
+ create(workflow: {
20
+ id: string;
21
+ name: string;
22
+ args: string;
23
+ }): Promise<void>;
24
+ find(id: string, options?: {
25
+ steps?: boolean;
26
+ }): Promise<WorkflowState | null>;
27
+ acquire(id: string, owner: string, leaseMs: number): Promise<AcquireResult>;
28
+ renew(id: string, owner: string, leaseMs: number): Promise<boolean>;
29
+ update<T>(id: string, options: {
30
+ owner?: string;
31
+ key?: string;
32
+ allSteps?: boolean;
33
+ }, decide: (snapshot: {
34
+ workflow: WorkflowRecord;
35
+ step: StepRecord | null;
36
+ steps: StepRecord[];
37
+ now: number;
38
+ }) => WorkflowChange<T>): Promise<T | undefined>;
39
+ prune(olderThanMs: number): Promise<number>;
40
+ private stepsOf;
41
+ private tick;
42
+ }
43
+ //# sourceMappingURL=MemoryWorkflowStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryWorkflowStore.d.ts","sourceRoot":"","sources":["../../../../services/queue/workflow/MemoryWorkflowStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,KAAK,cAAc,EAGnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,2FAA2F;AAC3F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAKF;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAI3C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,KAAK,CAA8C;gBAE9B,KAAK,EAAE,iBAAiB;IAE/C,MAAM,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3E,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IASlF,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkB3E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnE,MAAM,CAAC,CAAC,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAC7D,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjB,QAAQ,EAAE,cAAc,CAAC;QACzB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QACxB,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb,KAAK,cAAc,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAqCnB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcjD,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;CAOb"}