gemi 0.117.0 → 0.119.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.
- package/dist/ai/index.js +2 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/auth/AuthController.d.ts +12 -1
- package/dist/auth/AuthController.d.ts.map +1 -1
- package/dist/auth/connections/OAuthConnectionProvider.d.ts +4 -1
- package/dist/auth/connections/OAuthConnectionProvider.d.ts.map +1 -1
- package/dist/auth/oauth/OAuthProvider.d.ts +25 -0
- package/dist/auth/oauth/OAuthProvider.d.ts.map +1 -1
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-6y4nk9f1.js → chunk-01ehxca0.js} +2 -2
- package/dist/{chunk-6y4nk9f1.js.map → chunk-01ehxca0.js.map} +1 -1
- package/dist/{chunk-gn7kne7r.js → chunk-1m3hvy3q.js} +2 -2
- package/dist/{chunk-gn7kne7r.js.map → chunk-1m3hvy3q.js.map} +1 -1
- package/dist/{chunk-1ckha5dt.js → chunk-1z1rj2zq.js} +2 -2
- package/dist/{chunk-1ckha5dt.js.map → chunk-1z1rj2zq.js.map} +1 -1
- package/dist/{chunk-n9jyjp4a.js → chunk-30xxc6r7.js} +2 -2
- package/dist/{chunk-n9jyjp4a.js.map → chunk-30xxc6r7.js.map} +1 -1
- package/dist/{chunk-077rea02.js → chunk-33s2xqv1.js} +1 -1
- package/dist/{chunk-5m8vvtvn.js → chunk-39kyz4k6.js} +2 -2
- package/dist/{chunk-5m8vvtvn.js.map → chunk-39kyz4k6.js.map} +1 -1
- package/dist/chunk-3nf95j9e.js +5 -0
- package/dist/{chunk-63ewmmhc.js.map → chunk-3nf95j9e.js.map} +1 -1
- package/dist/{chunk-kpn7f58a.js → chunk-3zxfd7pn.js} +3 -3
- package/dist/{chunk-kpn7f58a.js.map → chunk-3zxfd7pn.js.map} +1 -1
- package/dist/{chunk-62jw0vsf.js → chunk-453rmkpm.js} +2 -2
- package/dist/{chunk-62jw0vsf.js.map → chunk-453rmkpm.js.map} +1 -1
- package/dist/{chunk-x84as3vy.js → chunk-490sbcma.js} +2 -2
- package/dist/{chunk-x84as3vy.js.map → chunk-490sbcma.js.map} +1 -1
- package/dist/{chunk-stnd9qht.js → chunk-4c1kdd8p.js} +2 -2
- package/dist/{chunk-stnd9qht.js.map → chunk-4c1kdd8p.js.map} +1 -1
- package/dist/{chunk-j1453bn1.js → chunk-5cgq9c43.js} +2 -2
- package/dist/{chunk-j1453bn1.js.map → chunk-5cgq9c43.js.map} +1 -1
- package/dist/{chunk-hr61ekcr.js → chunk-5dbpgyrx.js} +2 -2
- package/dist/{chunk-hr61ekcr.js.map → chunk-5dbpgyrx.js.map} +1 -1
- package/dist/{chunk-wzzrz612.js → chunk-5ses4tcz.js} +2 -2
- package/dist/{chunk-wzzrz612.js.map → chunk-5ses4tcz.js.map} +1 -1
- package/dist/{chunk-pepzecrm.js → chunk-675kzd7z.js} +2 -2
- package/dist/{chunk-pepzecrm.js.map → chunk-675kzd7z.js.map} +1 -1
- package/dist/{chunk-yhp6bvhj.js → chunk-76p0rf4d.js} +3 -3
- package/dist/{chunk-yhp6bvhj.js.map → chunk-76p0rf4d.js.map} +1 -1
- package/dist/{chunk-bvqae0px.js → chunk-8t6dwwz6.js} +1 -1
- package/dist/{chunk-a32wfzdq.js → chunk-8wcpxm41.js} +2 -2
- package/dist/{chunk-a32wfzdq.js.map → chunk-8wcpxm41.js.map} +1 -1
- package/dist/{chunk-ntxsdchf.js → chunk-9pkj7sk6.js} +2 -2
- package/dist/{chunk-ntxsdchf.js.map → chunk-9pkj7sk6.js.map} +1 -1
- package/dist/{chunk-w4e480he.js → chunk-a1qt8aky.js} +2 -2
- package/dist/{chunk-w4e480he.js.map → chunk-a1qt8aky.js.map} +1 -1
- package/dist/{chunk-e7ezmag9.js → chunk-aedkrck1.js} +1 -1
- package/dist/{chunk-arwmvgrz.js → chunk-aqpaw4jq.js} +2 -2
- package/dist/{chunk-arwmvgrz.js.map → chunk-aqpaw4jq.js.map} +1 -1
- package/dist/{chunk-hvpn18bb.js → chunk-bgwtdbfw.js} +3 -3
- package/dist/{chunk-hvpn18bb.js.map → chunk-bgwtdbfw.js.map} +1 -1
- package/dist/{chunk-gjy2qjcr.js → chunk-bz8xssrc.js} +2 -2
- package/dist/{chunk-gjy2qjcr.js.map → chunk-bz8xssrc.js.map} +1 -1
- package/dist/{chunk-yvtmygrk.js → chunk-cte6ysqd.js} +4 -4
- package/dist/{chunk-yvtmygrk.js.map → chunk-cte6ysqd.js.map} +1 -1
- package/dist/{chunk-3w4hk6q2.js → chunk-cvfg88cx.js} +3 -3
- package/dist/{chunk-3w4hk6q2.js.map → chunk-cvfg88cx.js.map} +1 -1
- package/dist/{chunk-wk1tp1f1.js → chunk-d806cy7p.js} +2 -2
- package/dist/{chunk-wk1tp1f1.js.map → chunk-d806cy7p.js.map} +1 -1
- package/dist/{chunk-zkjs3m5m.js → chunk-dwpn6fze.js} +2 -2
- package/dist/{chunk-zkjs3m5m.js.map → chunk-dwpn6fze.js.map} +1 -1
- package/dist/{chunk-mhteg4yz.js → chunk-dxag6enj.js} +6 -6
- package/dist/{chunk-mhteg4yz.js.map → chunk-dxag6enj.js.map} +4 -4
- package/dist/{chunk-5p4z1fgc.js → chunk-e7jr64q9.js} +2 -2
- package/dist/{chunk-5p4z1fgc.js.map → chunk-e7jr64q9.js.map} +1 -1
- package/dist/{chunk-nb2gggba.js → chunk-ebret82e.js} +3 -3
- package/dist/{chunk-nb2gggba.js.map → chunk-ebret82e.js.map} +1 -1
- package/dist/{chunk-g2wncay4.js → chunk-eke2frrm.js} +3 -3
- package/dist/{chunk-g2wncay4.js.map → chunk-eke2frrm.js.map} +1 -1
- package/dist/{chunk-ffgmqwzy.js → chunk-fsj5k511.js} +2 -2
- package/dist/{chunk-ffgmqwzy.js.map → chunk-fsj5k511.js.map} +1 -1
- package/dist/{chunk-076jezzg.js → chunk-g5ppst76.js} +3 -3
- package/dist/{chunk-076jezzg.js.map → chunk-g5ppst76.js.map} +1 -1
- package/dist/{chunk-37pk2cjg.js → chunk-g9hhdcax.js} +2 -2
- package/dist/{chunk-37pk2cjg.js.map → chunk-g9hhdcax.js.map} +1 -1
- package/dist/{chunk-dz99g58c.js → chunk-gqfqnv3f.js} +2 -2
- package/dist/{chunk-dz99g58c.js.map → chunk-gqfqnv3f.js.map} +1 -1
- package/dist/{chunk-51w202vr.js → chunk-hkf2k2eq.js} +3 -3
- package/dist/{chunk-51w202vr.js.map → chunk-hkf2k2eq.js.map} +1 -1
- package/dist/{chunk-dcgvq79a.js → chunk-hm9cjxy2.js} +2 -2
- package/dist/{chunk-dcgvq79a.js.map → chunk-hm9cjxy2.js.map} +1 -1
- package/dist/{chunk-5w6kyxsj.js → chunk-hr1r3g0d.js} +2 -2
- package/dist/{chunk-5w6kyxsj.js.map → chunk-hr1r3g0d.js.map} +1 -1
- package/dist/{chunk-fnwbbmnk.js → chunk-hzepfrzy.js} +2 -2
- package/dist/{chunk-fnwbbmnk.js.map → chunk-hzepfrzy.js.map} +1 -1
- package/dist/{chunk-pgy3mfxw.js → chunk-j5858bz7.js} +2 -2
- package/dist/{chunk-pgy3mfxw.js.map → chunk-j5858bz7.js.map} +1 -1
- package/dist/{chunk-c2n6zdyd.js → chunk-jf6qqzat.js} +2 -2
- package/dist/{chunk-c2n6zdyd.js.map → chunk-jf6qqzat.js.map} +1 -1
- package/dist/{chunk-8gtc3s1y.js → chunk-jg79n382.js} +2 -2
- package/dist/{chunk-8gtc3s1y.js.map → chunk-jg79n382.js.map} +1 -1
- package/dist/{chunk-t65074mw.js → chunk-kkte8nze.js} +3 -3
- package/dist/{chunk-t65074mw.js.map → chunk-kkte8nze.js.map} +1 -1
- package/dist/{chunk-x7qwx07b.js → chunk-m4kmetpb.js} +2 -2
- package/dist/{chunk-x7qwx07b.js.map → chunk-m4kmetpb.js.map} +1 -1
- package/dist/{chunk-ge9xjwgq.js → chunk-n4sdm0jn.js} +3 -3
- package/dist/{chunk-ge9xjwgq.js.map → chunk-n4sdm0jn.js.map} +1 -1
- package/dist/chunk-nang3847.js +416 -0
- package/dist/chunk-nang3847.js.map +24 -0
- package/dist/{chunk-vj5necm0.js → chunk-nrezmscd.js} +1 -1
- package/dist/{chunk-v8vnxkvp.js → chunk-p83erprx.js} +2 -2
- package/dist/{chunk-v8vnxkvp.js.map → chunk-p83erprx.js.map} +1 -1
- package/dist/{chunk-sj4f7x4p.js → chunk-pkr5dsbk.js} +2 -2
- package/dist/{chunk-sj4f7x4p.js.map → chunk-pkr5dsbk.js.map} +1 -1
- package/dist/{chunk-f8vcwzgd.js → chunk-pqc16rrx.js} +2 -2
- package/dist/{chunk-f8vcwzgd.js.map → chunk-pqc16rrx.js.map} +1 -1
- package/dist/{chunk-hvgmqt6z.js → chunk-pvz90a49.js} +2 -2
- package/dist/{chunk-hvgmqt6z.js.map → chunk-pvz90a49.js.map} +1 -1
- package/dist/{chunk-s4f56035.js → chunk-q290tgza.js} +2 -2
- package/dist/{chunk-s4f56035.js.map → chunk-q290tgza.js.map} +1 -1
- package/dist/{chunk-vtc23xpk.js → chunk-q86tfx95.js} +2 -2
- package/dist/{chunk-vtc23xpk.js.map → chunk-q86tfx95.js.map} +1 -1
- package/dist/{chunk-wgb79ysr.js → chunk-qf4bmee9.js} +2 -2
- package/dist/{chunk-wgb79ysr.js.map → chunk-qf4bmee9.js.map} +1 -1
- package/dist/{chunk-a7r39713.js → chunk-qkxnvpaj.js} +2 -2
- package/dist/{chunk-a7r39713.js.map → chunk-qkxnvpaj.js.map} +1 -1
- package/dist/{chunk-t87w4h84.js → chunk-qntv7bms.js} +2 -2
- package/dist/{chunk-t87w4h84.js.map → chunk-qntv7bms.js.map} +1 -1
- package/dist/chunk-r1favzz4.js +19 -0
- package/dist/{chunk-rhmpphhc.js.map → chunk-r1favzz4.js.map} +5 -4
- package/dist/{chunk-veq07rp8.js → chunk-razjfecn.js} +1 -1
- package/dist/{chunk-a77586gv.js → chunk-scc0j5k9.js} +2 -2
- package/dist/{chunk-a77586gv.js.map → chunk-scc0j5k9.js.map} +1 -1
- package/dist/{chunk-cytss9mb.js → chunk-sce5jes2.js} +2 -2
- package/dist/{chunk-cytss9mb.js.map → chunk-sce5jes2.js.map} +1 -1
- package/dist/{chunk-1zzd39qg.js → chunk-sn04cyw0.js} +2 -2
- package/dist/{chunk-1zzd39qg.js.map → chunk-sn04cyw0.js.map} +1 -1
- package/dist/{chunk-wwdbgshx.js → chunk-tfdmvxza.js} +2 -2
- package/dist/{chunk-wwdbgshx.js.map → chunk-tfdmvxza.js.map} +1 -1
- package/dist/{chunk-jqrs16g2.js → chunk-tzdenj0n.js} +3 -3
- package/dist/{chunk-jqrs16g2.js.map → chunk-tzdenj0n.js.map} +1 -1
- package/dist/chunk-vkkt7j2y.js +10 -0
- package/dist/{chunk-2czfefn2.js.map → chunk-vkkt7j2y.js.map} +3 -3
- package/dist/{chunk-qhw0hej0.js → chunk-x6v2zex2.js} +2 -2
- package/dist/{chunk-qhw0hej0.js.map → chunk-x6v2zex2.js.map} +1 -1
- package/dist/{chunk-yfwrbfnw.js → chunk-xfw8zyvn.js} +2 -2
- package/dist/{chunk-yfwrbfnw.js.map → chunk-xfw8zyvn.js.map} +1 -1
- package/dist/{chunk-sksmnjkn.js → chunk-xtzn0qfh.js} +2 -2
- package/dist/{chunk-sksmnjkn.js.map → chunk-xtzn0qfh.js.map} +1 -1
- package/dist/{chunk-jpetnpzn.js → chunk-xx3zvc3g.js} +2 -2
- package/dist/{chunk-jpetnpzn.js.map → chunk-xx3zvc3g.js.map} +1 -1
- package/dist/chunk-xx7necqt.js +71 -0
- package/dist/{chunk-00n3gwr8.js.map → chunk-xx7necqt.js.map} +3 -3
- package/dist/{chunk-fk6nxhxn.js → chunk-xzn2nmny.js} +2 -2
- package/dist/{chunk-fk6nxhxn.js.map → chunk-xzn2nmny.js.map} +1 -1
- package/dist/{chunk-fa37qzm3.js → chunk-y09r0wsw.js} +3 -3
- package/dist/{chunk-fa37qzm3.js.map → chunk-y09r0wsw.js.map} +1 -1
- package/dist/{chunk-zw6843j3.js → chunk-z759yah5.js} +2 -2
- package/dist/{chunk-zw6843j3.js.map → chunk-z759yah5.js.map} +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/discovery.d.ts +8 -0
- package/dist/services/discovery.d.ts.map +1 -1
- package/dist/services/index.d.ts +8 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -3
- package/dist/services/index.js.map +2 -2
- package/dist/services/queue/DatabaseQueueDriver.d.ts +23 -2
- package/dist/services/queue/DatabaseQueueDriver.d.ts.map +1 -1
- package/dist/services/queue/Job.d.ts +3 -0
- package/dist/services/queue/Job.d.ts.map +1 -1
- package/dist/services/queue/MemoryQueueDriver.d.ts +10 -0
- package/dist/services/queue/MemoryQueueDriver.d.ts.map +1 -1
- package/dist/services/queue/QueueDriver.d.ts +9 -0
- package/dist/services/queue/QueueDriver.d.ts.map +1 -1
- package/dist/services/queue/QueueManager.d.ts +33 -7
- package/dist/services/queue/QueueManager.d.ts.map +1 -1
- package/dist/services/queue/QueueServiceProvider.d.ts.map +1 -1
- package/dist/services/queue/backoff.d.ts +6 -0
- package/dist/services/queue/backoff.d.ts.map +1 -0
- package/dist/services/queue/config.d.ts +9 -0
- package/dist/services/queue/config.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts +89 -0
- package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts.map +1 -0
- package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts +43 -0
- package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts.map +1 -0
- package/dist/services/queue/workflow/Step.d.ts +202 -0
- package/dist/services/queue/workflow/Step.d.ts.map +1 -0
- package/dist/services/queue/workflow/Workflow.d.ts +124 -0
- package/dist/services/queue/workflow/Workflow.d.ts.map +1 -0
- package/dist/services/queue/workflow/WorkflowRuntime.d.ts +60 -0
- package/dist/services/queue/workflow/WorkflowRuntime.d.ts.map +1 -0
- package/dist/services/queue/workflow/WorkflowStore.d.ts +184 -0
- package/dist/services/queue/workflow/WorkflowStore.d.ts.map +1 -0
- package/dist/services/queue/workflow/duration.d.ts +8 -0
- package/dist/services/queue/workflow/duration.d.ts.map +1 -0
- package/dist/services/queue/workflow/workflowContract.d.ts +30 -0
- package/dist/services/queue/workflow/workflowContract.d.ts.map +1 -0
- package/dist/stats/route-table.js +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vitest/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-00n3gwr8.js +0 -71
- package/dist/chunk-2czfefn2.js +0 -10
- package/dist/chunk-63ewmmhc.js +0 -5
- package/dist/chunk-rhmpphhc.js +0 -19
- package/dist/chunk-y0en07zh.js +0 -302
- package/dist/chunk-y0en07zh.js.map +0 -17
- /package/dist/{chunk-077rea02.js.map → chunk-33s2xqv1.js.map} +0 -0
- /package/dist/{chunk-bvqae0px.js.map → chunk-8t6dwwz6.js.map} +0 -0
- /package/dist/{chunk-e7ezmag9.js.map → chunk-aedkrck1.js.map} +0 -0
- /package/dist/{chunk-vj5necm0.js.map → chunk-nrezmscd.js.map} +0 -0
- /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
|
|
142
|
-
* not exist — the same DDL Prisma generates for
|
|
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":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAIL,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;
|
|
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;
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
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
|
-
|
|
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":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAMhE,OAAO,EAAiB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIjE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEjE,OAAO,KAAK,EAAgB,UAAU,
|
|
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;
|
|
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;
|
|
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{
|
|
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=
|
|
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": "
|
|
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"}
|