openworkflow 0.4.1 → 0.5.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/README.md +53 -48
- package/dist/backend-postgres/index.d.ts +44 -0
- package/dist/backend-postgres/index.d.ts.map +1 -0
- package/dist/backend-postgres/index.js +535 -0
- package/dist/backend-postgres/index.js.map +1 -0
- package/dist/backend-postgres/postgres.d.ts +42 -0
- package/dist/backend-postgres/postgres.d.ts.map +1 -0
- package/dist/backend-postgres/postgres.js +234 -0
- package/dist/backend-postgres/postgres.js.map +1 -0
- package/dist/backend-sqlite/index.d.ts +41 -1
- package/dist/backend-sqlite/index.d.ts.map +1 -1
- package/dist/backend-sqlite/index.js +654 -1
- package/dist/backend-sqlite/index.js.map +1 -1
- package/dist/backend-sqlite/sqlite.d.ts +18 -2
- package/dist/backend-sqlite/sqlite.d.ts.map +1 -1
- package/dist/backend-sqlite/sqlite.js +20 -2
- package/dist/backend-sqlite/sqlite.js.map +1 -1
- package/dist/{core/backend.d.ts → backend.d.ts} +7 -5
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js.map +1 -0
- package/dist/bin/openworkflow.d.ts +3 -0
- package/dist/bin/openworkflow.d.ts.map +1 -0
- package/dist/bin/openworkflow.js +44 -0
- package/dist/bin/openworkflow.js.map +1 -0
- package/dist/client.d.ts +141 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/{sdk/sdk.js → client.js} +44 -71
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +27 -21
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +44 -36
- package/dist/config.js.map +1 -1
- package/dist/core/duration.d.ts +4 -2
- package/dist/core/duration.d.ts.map +1 -1
- package/dist/core/duration.js +3 -1
- package/dist/core/duration.js.map +1 -1
- package/dist/core/error.d.ts +14 -0
- package/dist/core/error.d.ts.map +1 -0
- package/dist/core/error.js +18 -0
- package/dist/core/error.js.map +1 -0
- package/dist/core/result.d.ts +14 -4
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +10 -0
- package/dist/core/result.js.map +1 -1
- package/dist/core/retry.d.ts +0 -9
- package/dist/core/retry.d.ts.map +1 -1
- package/dist/core/retry.js +0 -14
- package/dist/core/retry.js.map +1 -1
- package/dist/core/step.d.ts +1 -32
- package/dist/core/step.d.ts.map +1 -1
- package/dist/core/step.js +0 -35
- package/dist/core/step.js.map +1 -1
- package/dist/core/workflow.d.ts +2 -47
- package/dist/core/workflow.d.ts.map +1 -1
- package/dist/core/workflow.js +0 -44
- package/dist/core/workflow.js.map +1 -1
- package/dist/{execution/execution.d.ts → execution.d.ts} +4 -26
- package/dist/execution.d.ts.map +1 -0
- package/dist/{execution/execution.js → execution.js} +4 -4
- package/dist/execution.js.map +1 -0
- package/dist/index.d.ts +6 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +8 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +5 -0
- package/dist/internal.js.map +1 -0
- package/dist/pg/backend.d.ts +42 -0
- package/dist/pg/backend.d.ts.map +1 -0
- package/dist/pg/backend.js +534 -0
- package/dist/pg/backend.js.map +1 -0
- package/dist/pg/index.d.ts +3 -0
- package/dist/pg/index.d.ts.map +1 -0
- package/dist/pg/index.js +3 -0
- package/dist/pg/index.js.map +1 -0
- package/dist/pg/postgres.d.ts +42 -0
- package/dist/pg/postgres.d.ts.map +1 -0
- package/dist/pg/postgres.js +234 -0
- package/dist/pg/postgres.js.map +1 -0
- package/dist/pg/scripts/db-migrate.d.ts +2 -0
- package/dist/pg/scripts/db-migrate.d.ts.map +1 -0
- package/dist/pg/scripts/db-migrate.js +5 -0
- package/dist/pg/scripts/db-migrate.js.map +1 -0
- package/dist/pg/scripts/db-reset.d.ts +2 -0
- package/dist/pg/scripts/db-reset.d.ts.map +1 -0
- package/dist/pg/scripts/db-reset.js +6 -0
- package/dist/pg/scripts/db-reset.js.map +1 -0
- package/dist/pg/scripts/squawk.d.ts +2 -0
- package/dist/pg/scripts/squawk.d.ts.map +1 -0
- package/dist/pg/scripts/squawk.js +17 -0
- package/dist/pg/scripts/squawk.js.map +1 -0
- package/dist/pg/vitest.global-setup.d.ts +3 -0
- package/dist/pg/vitest.global-setup.d.ts.map +1 -0
- package/dist/pg/vitest.global-setup.js +8 -0
- package/dist/pg/vitest.global-setup.js.map +1 -0
- package/dist/registry.d.ts +27 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +49 -0
- package/dist/registry.js.map +1 -0
- package/dist/{backend-sqlite → sqlite}/backend.d.ts +6 -4
- package/dist/sqlite/backend.d.ts.map +1 -0
- package/dist/{backend-sqlite → sqlite}/backend.js +31 -5
- package/dist/sqlite/backend.js.map +1 -0
- package/dist/sqlite/index.d.ts +3 -0
- package/dist/sqlite/index.d.ts.map +1 -0
- package/dist/sqlite/index.js +3 -0
- package/dist/sqlite/index.js.map +1 -0
- package/dist/sqlite/sqlite.d.ts +61 -0
- package/dist/sqlite/sqlite.d.ts.map +1 -0
- package/dist/sqlite/sqlite.js +247 -0
- package/dist/sqlite/sqlite.js.map +1 -0
- package/dist/testing/backend.testsuite.d.ts +20 -0
- package/dist/testing/backend.testsuite.d.ts.map +1 -0
- package/dist/{core → testing}/backend.testsuite.js +186 -53
- package/dist/testing/backend.testsuite.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/{worker/worker.d.ts → worker.d.ts} +11 -4
- package/dist/worker.d.ts.map +1 -0
- package/dist/{worker/worker.js → worker.js} +20 -10
- package/dist/worker.js.map +1 -0
- package/dist/workflow.d.ts +60 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +49 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +13 -3
- package/dist/backend-sqlite/backend.d.ts.map +0 -1
- package/dist/backend-sqlite/backend.js.map +0 -1
- package/dist/config/config.d.ts +0 -102
- package/dist/config/config.d.ts.map +0 -1
- package/dist/config/config.js +0 -29
- package/dist/config/config.js.map +0 -1
- package/dist/config/index.d.ts +0 -3
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -2
- package/dist/config/index.js.map +0 -1
- package/dist/core/backend-test-suite.d.ts +0 -22
- package/dist/core/backend-test-suite.d.ts.map +0 -1
- package/dist/core/backend-test-suite.js +0 -960
- package/dist/core/backend-test-suite.js.map +0 -1
- package/dist/core/backend.d.ts.map +0 -1
- package/dist/core/backend.js.map +0 -1
- package/dist/core/backend.testsuite.d.ts +0 -21
- package/dist/core/backend.testsuite.d.ts.map +0 -1
- package/dist/core/backend.testsuite.js.map +0 -1
- package/dist/core/duration.test.d.ts +0 -2
- package/dist/core/duration.test.d.ts.map +0 -1
- package/dist/core/duration.test.js +0 -264
- package/dist/core/duration.test.js.map +0 -1
- package/dist/core/result.test.d.ts +0 -2
- package/dist/core/result.test.d.ts.map +0 -1
- package/dist/core/result.test.js +0 -11
- package/dist/core/result.test.js.map +0 -1
- package/dist/core/retry.test.d.ts +0 -2
- package/dist/core/retry.test.d.ts.map +0 -1
- package/dist/core/retry.test.js +0 -36
- package/dist/core/retry.test.js.map +0 -1
- package/dist/core/step.test.d.ts +0 -2
- package/dist/core/step.test.d.ts.map +0 -1
- package/dist/core/step.test.js +0 -340
- package/dist/core/step.test.js.map +0 -1
- package/dist/core/workflow.test.d.ts +0 -2
- package/dist/core/workflow.test.d.ts.map +0 -1
- package/dist/core/workflow.test.js +0 -216
- package/dist/core/workflow.test.js.map +0 -1
- package/dist/execution/execution.d.ts.map +0 -1
- package/dist/execution/execution.js.map +0 -1
- package/dist/execution/execution.test.d.ts +0 -2
- package/dist/execution/execution.test.d.ts.map +0 -1
- package/dist/execution/execution.test.js +0 -382
- package/dist/execution/execution.test.js.map +0 -1
- package/dist/global.d.ts +0 -62
- package/dist/global.d.ts.map +0 -1
- package/dist/global.js +0 -78
- package/dist/global.js.map +0 -1
- package/dist/sdk/sdk.d.ts +0 -182
- package/dist/sdk/sdk.d.ts.map +0 -1
- package/dist/sdk/sdk.js.map +0 -1
- package/dist/sdk/sdk.test.d.ts +0 -2
- package/dist/sdk/sdk.test.d.ts.map +0 -1
- package/dist/sdk/sdk.test.js +0 -195
- package/dist/sdk/sdk.test.js.map +0 -1
- package/dist/worker/worker.d.ts.map +0 -1
- package/dist/worker/worker.js.map +0 -1
- package/dist/worker/worker.test.d.ts +0 -2
- package/dist/worker/worker.test.d.ts.map +0 -1
- package/dist/worker/worker.test.js +0 -786
- package/dist/worker/worker.test.js.map +0 -1
- /package/dist/{core/backend.js → backend.js} +0 -0
package/README.md
CHANGED
|
@@ -8,37 +8,13 @@ OpenWorkflow is a TypeScript framework for building durable, resumable workflows
|
|
|
8
8
|
that can pause for seconds or months, survive crashes and deploys, and resume
|
|
9
9
|
exactly where they left off - all without extra servers to manage.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
> [Roadmap](#roadmap) for what’s coming next.
|
|
13
|
-
|
|
14
|
-
## Quick Start
|
|
15
|
-
|
|
16
|
-
Prerequisites:
|
|
17
|
-
|
|
18
|
-
- Node.js
|
|
19
|
-
- PostgreSQL (and/or SQLite)
|
|
20
|
-
|
|
21
|
-
### 1. Install
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm install openworkflow @openworkflow/backend-postgres @openworkflow/backend-sqlite
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
You only need to install the backend package(s) for the database you plan to
|
|
28
|
-
use.
|
|
29
|
-
|
|
30
|
-
### 2. Define a workflow
|
|
11
|
+
Define a workflow in a few lines:
|
|
31
12
|
|
|
32
13
|
```ts
|
|
33
|
-
import { BackendPostgres } from "@openworkflow/backend-postgres";
|
|
34
14
|
import { BackendSqlite } from "@openworkflow/backend-sqlite";
|
|
35
15
|
import { OpenWorkflow } from "openworkflow";
|
|
36
16
|
|
|
37
|
-
|
|
38
|
-
const backend = process.env["DATABASE_URL"]
|
|
39
|
-
? await BackendPostgres.connect(process.env["DATABASE_URL"])
|
|
40
|
-
: BackendSqlite.connect(); // optionally provide SQLite file path
|
|
41
|
-
|
|
17
|
+
const backend = BackendSqlite.connect("openworkflow/backend.db");
|
|
42
18
|
const ow = new OpenWorkflow({ backend });
|
|
43
19
|
|
|
44
20
|
const sendWelcomeEmail = ow.defineWorkflow(
|
|
@@ -67,29 +43,44 @@ const sendWelcomeEmail = ow.defineWorkflow(
|
|
|
67
43
|
);
|
|
68
44
|
```
|
|
69
45
|
|
|
70
|
-
|
|
46
|
+
> OpenWorkflow is in active development and moving quickly. Check out the
|
|
47
|
+
> [Roadmap](#roadmap) for what’s coming next.
|
|
71
48
|
|
|
72
|
-
|
|
73
|
-
separate process or the same one as your app:
|
|
49
|
+
## Quick Start
|
|
74
50
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
51
|
+
Prerequisites:
|
|
52
|
+
|
|
53
|
+
- Node.js
|
|
54
|
+
- PostgreSQL (and/or SQLite)
|
|
55
|
+
|
|
56
|
+
### 1. Install
|
|
57
|
+
|
|
58
|
+
Install and set up OpenWorkflow with:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npx @openworkflow/cli init
|
|
78
62
|
```
|
|
79
63
|
|
|
80
|
-
|
|
64
|
+
The CLI will prompt for your backend, installs dependencies, and generates:
|
|
65
|
+
`openworkflow.config.ts`, `openworkflow/hello-world.ts`, `.env`, `.gitignore`,
|
|
66
|
+
and a `worker` script.
|
|
81
67
|
|
|
82
|
-
|
|
68
|
+
### 2. Start a worker
|
|
83
69
|
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const runHandle = await sendWelcomeEmail.run({ userId: req.params.id });
|
|
89
|
-
res.json({ runId: runHandle.workflowRun.id });
|
|
90
|
-
});
|
|
70
|
+
```bash
|
|
71
|
+
npm run worker
|
|
72
|
+
# or
|
|
73
|
+
npx @openworkflow/cli worker start
|
|
91
74
|
```
|
|
92
75
|
|
|
76
|
+
This runs the worker using `openworkflow.config.ts` and auto-loads workflows
|
|
77
|
+
from the configured directories (default: `openworkflow/`).
|
|
78
|
+
|
|
79
|
+
### 3. Run workflows from your app
|
|
80
|
+
|
|
81
|
+
Edit the generated workflow file and run it from your application code using the
|
|
82
|
+
OpenWorkflow client APIs (see examples below).
|
|
83
|
+
|
|
93
84
|
That's it. Your workflow is now durable, resumable, and fault-tolerant.
|
|
94
85
|
|
|
95
86
|
## Core Concepts
|
|
@@ -133,9 +124,24 @@ the email.
|
|
|
133
124
|
### Workers
|
|
134
125
|
|
|
135
126
|
Workers are long-running processes that poll your database for pending workflows
|
|
136
|
-
and execute them.
|
|
127
|
+
and execute them. Run workers via the CLI so workflow discovery stays in sync
|
|
128
|
+
with your `openworkflow.config.ts`:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
npm run worker
|
|
132
|
+
# or
|
|
133
|
+
npx @openworkflow/cli worker start
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Or, for more control, you can write your own workers:
|
|
137
137
|
|
|
138
138
|
```ts
|
|
139
|
+
import { BackendSqlite } from "@openworkflow/backend-sqlite";
|
|
140
|
+
import { OpenWorkflow } from "openworkflow";
|
|
141
|
+
|
|
142
|
+
const backend = BackendSqlite.connect("openworkflow/backend.db");
|
|
143
|
+
const ow = new OpenWorkflow({ backend });
|
|
144
|
+
|
|
139
145
|
const worker = ow.newWorker({ concurrency: 20 });
|
|
140
146
|
await worker.start();
|
|
141
147
|
|
|
@@ -367,6 +373,7 @@ and Yup.
|
|
|
367
373
|
**Live in current `npm` release:**
|
|
368
374
|
|
|
369
375
|
- ✅ PostgreSQL and SQLite backends
|
|
376
|
+
- ✅ CLI (`npx @openworkflow/cli`)
|
|
370
377
|
- ✅ Worker with concurrency control
|
|
371
378
|
- ✅ Step memoization & retries
|
|
372
379
|
- ✅ Graceful shutdown
|
|
@@ -377,13 +384,11 @@ and Yup.
|
|
|
377
384
|
|
|
378
385
|
**Coming Soon:**
|
|
379
386
|
|
|
380
|
-
> These releases don't yet include a dashboard UI
|
|
381
|
-
>
|
|
382
|
-
>
|
|
383
|
-
>
|
|
387
|
+
> These releases don't yet include a dashboard UI. For now, you can inspect
|
|
388
|
+
> workflow and step state directly in PostgreSQL or SQLite (workflow_runs and
|
|
389
|
+
> step_attempts tables). A dashboard is planned for an upcoming release to make
|
|
390
|
+
> debugging and monitoring much easier.
|
|
384
391
|
|
|
385
|
-
- Improved local dev experience (coming in v0.5)
|
|
386
|
-
- CLI (coming in v0.5)
|
|
387
392
|
- Dashboard UI
|
|
388
393
|
- Idempotency keys
|
|
389
394
|
- Rollback / compensation functions
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Backend, CancelWorkflowRunParams, ClaimWorkflowRunParams, CompleteStepAttemptParams, CompleteWorkflowRunParams, CreateStepAttemptParams, CreateWorkflowRunParams, ExtendWorkflowRunLeaseParams, FailStepAttemptParams, FailWorkflowRunParams, GetStepAttemptParams, GetWorkflowRunParams, ListStepAttemptsParams, ListWorkflowRunsParams, PaginatedResponse, SleepWorkflowRunParams } from "../backend.js";
|
|
2
|
+
import type { StepAttempt } from "../core/step.js";
|
|
3
|
+
import type { WorkflowRun } from "../core/workflow.js";
|
|
4
|
+
interface BackendPostgresOptions {
|
|
5
|
+
namespaceId?: string;
|
|
6
|
+
runMigrations?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Manages a connection to a Postgres database for workflow operations.
|
|
10
|
+
*/
|
|
11
|
+
export declare class BackendPostgres implements Backend {
|
|
12
|
+
private pg;
|
|
13
|
+
private namespaceId;
|
|
14
|
+
private constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Create and initialize a new BackendPostgres instance. This will
|
|
17
|
+
* automatically run migrations on startup unless `runMigrations` is set to
|
|
18
|
+
* false.
|
|
19
|
+
* @param url - Postgres connection URL
|
|
20
|
+
* @param options - Backend options
|
|
21
|
+
* @returns A connected backend instance
|
|
22
|
+
*/
|
|
23
|
+
static connect(url: string, options?: BackendPostgresOptions): Promise<BackendPostgres>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
createWorkflowRun(params: CreateWorkflowRunParams): Promise<WorkflowRun>;
|
|
26
|
+
getWorkflowRun(params: GetWorkflowRunParams): Promise<WorkflowRun | null>;
|
|
27
|
+
listWorkflowRuns(params: ListWorkflowRunsParams): Promise<PaginatedResponse<WorkflowRun>>;
|
|
28
|
+
private buildListWorkflowRunsWhere;
|
|
29
|
+
claimWorkflowRun(params: ClaimWorkflowRunParams): Promise<WorkflowRun | null>;
|
|
30
|
+
extendWorkflowRunLease(params: ExtendWorkflowRunLeaseParams): Promise<WorkflowRun>;
|
|
31
|
+
sleepWorkflowRun(params: SleepWorkflowRunParams): Promise<WorkflowRun>;
|
|
32
|
+
completeWorkflowRun(params: CompleteWorkflowRunParams): Promise<WorkflowRun>;
|
|
33
|
+
failWorkflowRun(params: FailWorkflowRunParams): Promise<WorkflowRun>;
|
|
34
|
+
cancelWorkflowRun(params: CancelWorkflowRunParams): Promise<WorkflowRun>;
|
|
35
|
+
createStepAttempt(params: CreateStepAttemptParams): Promise<StepAttempt>;
|
|
36
|
+
getStepAttempt(params: GetStepAttemptParams): Promise<StepAttempt | null>;
|
|
37
|
+
listStepAttempts(params: ListStepAttemptsParams): Promise<PaginatedResponse<StepAttempt>>;
|
|
38
|
+
private buildListStepAttemptsWhere;
|
|
39
|
+
private processPaginationResults;
|
|
40
|
+
completeStepAttempt(params: CompleteStepAttemptParams): Promise<StepAttempt>;
|
|
41
|
+
failStepAttempt(params: FailStepAttemptParams): Promise<StepAttempt>;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backend-postgres/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvD,UAAU,sBAAsB;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO;IAKP;;;;;;;OAOG;WACU,OAAO,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,eAAe,CAAC;IAiBrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC;IA0CjB,cAAc,CAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxB,gBAAgB,CACpB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IA2B1C,OAAO,CAAC,0BAA0B;IA0B5B,gBAAgB,CACpB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmDxB,sBAAsB,CAC1B,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,WAAW,CAAC;IAkBjB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBtE,mBAAmB,CACvB,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,WAAW,CAAC;IAuBjB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;IAgEpE,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC;IA2CjB,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAoCjB,cAAc,CAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWxB,gBAAgB,CACpB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IA2B1C,OAAO,CAAC,0BAA0B;IA6BlC,OAAO,CAAC,wBAAwB;IAyC1B,mBAAmB,CACvB,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,WAAW,CAAC;IA0BjB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;CAyB3E"}
|