openworkflow 0.5.0 → 0.6.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 (193) hide show
  1. package/README.md +40 -347
  2. package/dist/{testing → backend-test}/backend.testsuite.d.ts +1 -1
  3. package/dist/backend-test/backend.testsuite.d.ts.map +1 -0
  4. package/dist/{testing → backend-test}/backend.testsuite.js +8 -9
  5. package/dist/backend-test/index.d.ts +2 -0
  6. package/dist/backend-test/index.d.ts.map +1 -0
  7. package/dist/{testing → backend-test}/index.js +0 -1
  8. package/dist/backend.js +0 -1
  9. package/dist/backend.testsuite.d.ts +20 -0
  10. package/dist/backend.testsuite.d.ts.map +1 -0
  11. package/dist/backend.testsuite.js +1090 -0
  12. package/dist/bin/openworkflow.js +0 -1
  13. package/dist/chaos.test.d.ts +2 -0
  14. package/dist/chaos.test.d.ts.map +1 -0
  15. package/dist/chaos.test.js +88 -0
  16. package/dist/client.js +0 -1
  17. package/dist/client.test.d.ts +2 -0
  18. package/dist/client.test.d.ts.map +1 -0
  19. package/dist/client.test.js +311 -0
  20. package/dist/core/duration.js +0 -1
  21. package/dist/core/duration.test.d.ts +2 -0
  22. package/dist/core/duration.test.d.ts.map +1 -0
  23. package/dist/core/duration.test.js +263 -0
  24. package/dist/core/error.js +0 -1
  25. package/dist/core/error.test.d.ts +2 -0
  26. package/dist/core/error.test.d.ts.map +1 -0
  27. package/dist/core/error.test.js +60 -0
  28. package/dist/core/json.js +0 -1
  29. package/dist/core/result.js +0 -1
  30. package/dist/core/result.test.d.ts +2 -0
  31. package/dist/core/result.test.d.ts.map +1 -0
  32. package/dist/core/result.test.js +11 -0
  33. package/dist/core/retry.js +0 -1
  34. package/dist/core/schema.js +0 -1
  35. package/dist/core/step.js +0 -1
  36. package/dist/core/step.test.d.ts +2 -0
  37. package/dist/core/step.test.d.ts.map +1 -0
  38. package/dist/core/step.test.js +266 -0
  39. package/dist/core/workflow.js +0 -1
  40. package/dist/core/workflow.test.d.ts +2 -0
  41. package/dist/core/workflow.test.d.ts.map +1 -0
  42. package/dist/core/workflow.test.js +113 -0
  43. package/dist/driver.d.ts +116 -0
  44. package/dist/driver.d.ts.map +1 -0
  45. package/dist/driver.js +1 -0
  46. package/dist/execution.js +0 -1
  47. package/dist/execution.test.d.ts +2 -0
  48. package/dist/execution.test.d.ts.map +1 -0
  49. package/dist/execution.test.js +381 -0
  50. package/dist/factory.d.ts +74 -0
  51. package/dist/factory.d.ts.map +1 -0
  52. package/dist/factory.js +72 -0
  53. package/dist/index.js +0 -1
  54. package/dist/internal.d.ts +4 -5
  55. package/dist/internal.d.ts.map +1 -1
  56. package/dist/internal.js +1 -4
  57. package/dist/{backend-sqlite/index.d.ts → node-sqlite/backend.d.ts} +14 -4
  58. package/dist/node-sqlite/backend.d.ts.map +1 -0
  59. package/dist/{backend-sqlite/index.js → node-sqlite/backend.js} +23 -5
  60. package/dist/node-sqlite/index.d.ts +11 -0
  61. package/dist/node-sqlite/index.d.ts.map +1 -0
  62. package/dist/node-sqlite/index.js +7 -0
  63. package/dist/{backend-sqlite → node-sqlite}/sqlite.d.ts +2 -3
  64. package/dist/node-sqlite/sqlite.d.ts.map +1 -0
  65. package/dist/{backend-sqlite → node-sqlite}/sqlite.js +0 -1
  66. package/dist/{pg → postgres}/backend.d.ts +3 -1
  67. package/dist/postgres/backend.d.ts.map +1 -0
  68. package/dist/{pg → postgres}/backend.js +5 -5
  69. package/dist/postgres/backend.test.d.ts +2 -0
  70. package/dist/postgres/backend.test.d.ts.map +1 -0
  71. package/dist/postgres/backend.test.js +19 -0
  72. package/dist/postgres/driver.d.ts +81 -0
  73. package/dist/postgres/driver.d.ts.map +1 -0
  74. package/dist/postgres/driver.js +63 -0
  75. package/dist/postgres/index.d.ts +11 -0
  76. package/dist/postgres/index.d.ts.map +1 -0
  77. package/dist/postgres/index.js +7 -0
  78. package/dist/postgres/internal.d.ts +2 -0
  79. package/dist/postgres/internal.d.ts.map +1 -0
  80. package/dist/postgres/internal.js +1 -0
  81. package/dist/postgres/postgres.d.ts.map +1 -0
  82. package/dist/{backend-postgres → postgres}/postgres.js +0 -1
  83. package/dist/postgres/postgres.test.d.ts +2 -0
  84. package/dist/postgres/postgres.test.d.ts.map +1 -0
  85. package/dist/postgres/postgres.test.js +45 -0
  86. package/dist/postgres/scripts/db-migrate.d.ts.map +1 -0
  87. package/dist/{pg → postgres}/scripts/db-migrate.js +0 -1
  88. package/dist/postgres/scripts/db-reset.d.ts.map +1 -0
  89. package/dist/{pg → postgres}/scripts/db-reset.js +0 -1
  90. package/dist/{pg → postgres}/scripts/squawk.d.ts.map +1 -1
  91. package/dist/{pg → postgres}/scripts/squawk.js +0 -1
  92. package/dist/postgres/vitest.global-setup.d.ts.map +1 -0
  93. package/dist/{pg → postgres}/vitest.global-setup.js +0 -1
  94. package/dist/postgres.d.ts +2 -0
  95. package/dist/postgres.d.ts.map +1 -0
  96. package/dist/postgres.js +1 -0
  97. package/dist/registry.js +0 -1
  98. package/dist/registry.test.d.ts +2 -0
  99. package/dist/registry.test.d.ts.map +1 -0
  100. package/dist/registry.test.js +109 -0
  101. package/dist/sqlite/backend.d.ts +3 -1
  102. package/dist/sqlite/backend.d.ts.map +1 -1
  103. package/dist/sqlite/backend.js +5 -5
  104. package/dist/sqlite/backend.test.d.ts +2 -0
  105. package/dist/sqlite/backend.test.d.ts.map +1 -0
  106. package/dist/sqlite/backend.test.js +50 -0
  107. package/dist/sqlite/driver.d.ts +79 -0
  108. package/dist/sqlite/driver.d.ts.map +1 -0
  109. package/dist/sqlite/driver.js +62 -0
  110. package/dist/sqlite/index.d.ts +12 -2
  111. package/dist/sqlite/index.d.ts.map +1 -1
  112. package/dist/sqlite/index.js +11 -3
  113. package/dist/sqlite/internal.d.ts +2 -0
  114. package/dist/sqlite/internal.d.ts.map +1 -0
  115. package/dist/sqlite/internal.js +1 -0
  116. package/dist/sqlite/sqlite.js +0 -1
  117. package/dist/sqlite/sqlite.test.d.ts +2 -0
  118. package/dist/sqlite/sqlite.test.d.ts.map +1 -0
  119. package/dist/sqlite/sqlite.test.js +171 -0
  120. package/dist/sqlite.d.ts +2 -0
  121. package/dist/sqlite.d.ts.map +1 -0
  122. package/dist/sqlite.js +1 -0
  123. package/dist/tsconfig.tsbuildinfo +1 -1
  124. package/dist/worker.js +0 -1
  125. package/dist/worker.test.d.ts +2 -0
  126. package/dist/worker.test.d.ts.map +1 -0
  127. package/dist/worker.test.js +900 -0
  128. package/dist/workflow.js +0 -1
  129. package/dist/workflow.test.d.ts +2 -0
  130. package/dist/workflow.test.d.ts.map +1 -0
  131. package/dist/workflow.test.js +84 -0
  132. package/package.json +19 -5
  133. package/dist/backend-postgres/index.d.ts +0 -44
  134. package/dist/backend-postgres/index.d.ts.map +0 -1
  135. package/dist/backend-postgres/index.js +0 -535
  136. package/dist/backend-postgres/index.js.map +0 -1
  137. package/dist/backend-postgres/postgres.d.ts.map +0 -1
  138. package/dist/backend-postgres/postgres.js.map +0 -1
  139. package/dist/backend-sqlite/index.d.ts.map +0 -1
  140. package/dist/backend-sqlite/index.js.map +0 -1
  141. package/dist/backend-sqlite/sqlite.d.ts.map +0 -1
  142. package/dist/backend-sqlite/sqlite.js.map +0 -1
  143. package/dist/backend.js.map +0 -1
  144. package/dist/bin/openworkflow.js.map +0 -1
  145. package/dist/client.js.map +0 -1
  146. package/dist/config.d.ts +0 -34
  147. package/dist/config.d.ts.map +0 -1
  148. package/dist/config.js +0 -49
  149. package/dist/config.js.map +0 -1
  150. package/dist/core/duration.js.map +0 -1
  151. package/dist/core/error.js.map +0 -1
  152. package/dist/core/json.js.map +0 -1
  153. package/dist/core/result.js.map +0 -1
  154. package/dist/core/retry.js.map +0 -1
  155. package/dist/core/schema.js.map +0 -1
  156. package/dist/core/step.js.map +0 -1
  157. package/dist/core/workflow.js.map +0 -1
  158. package/dist/execution.js.map +0 -1
  159. package/dist/index.js.map +0 -1
  160. package/dist/internal.js.map +0 -1
  161. package/dist/pg/backend.d.ts.map +0 -1
  162. package/dist/pg/backend.js.map +0 -1
  163. package/dist/pg/index.d.ts +0 -3
  164. package/dist/pg/index.d.ts.map +0 -1
  165. package/dist/pg/index.js +0 -3
  166. package/dist/pg/index.js.map +0 -1
  167. package/dist/pg/postgres.d.ts +0 -42
  168. package/dist/pg/postgres.d.ts.map +0 -1
  169. package/dist/pg/postgres.js +0 -234
  170. package/dist/pg/postgres.js.map +0 -1
  171. package/dist/pg/scripts/db-migrate.d.ts.map +0 -1
  172. package/dist/pg/scripts/db-migrate.js.map +0 -1
  173. package/dist/pg/scripts/db-reset.d.ts.map +0 -1
  174. package/dist/pg/scripts/db-reset.js.map +0 -1
  175. package/dist/pg/scripts/squawk.js.map +0 -1
  176. package/dist/pg/vitest.global-setup.d.ts.map +0 -1
  177. package/dist/pg/vitest.global-setup.js.map +0 -1
  178. package/dist/registry.js.map +0 -1
  179. package/dist/sqlite/backend.js.map +0 -1
  180. package/dist/sqlite/index.js.map +0 -1
  181. package/dist/sqlite/sqlite.js.map +0 -1
  182. package/dist/testing/backend.testsuite.d.ts.map +0 -1
  183. package/dist/testing/backend.testsuite.js.map +0 -1
  184. package/dist/testing/index.d.ts +0 -2
  185. package/dist/testing/index.d.ts.map +0 -1
  186. package/dist/testing/index.js.map +0 -1
  187. package/dist/worker.js.map +0 -1
  188. package/dist/workflow.js.map +0 -1
  189. /package/dist/{backend-postgres → postgres}/postgres.d.ts +0 -0
  190. /package/dist/{pg → postgres}/scripts/db-migrate.d.ts +0 -0
  191. /package/dist/{pg → postgres}/scripts/db-reset.d.ts +0 -0
  192. /package/dist/{pg → postgres}/scripts/squawk.d.ts +0 -0
  193. /package/dist/{pg → postgres}/vitest.global-setup.d.ts +0 -0
package/dist/workflow.js CHANGED
@@ -46,4 +46,3 @@ export function isWorkflow(value) {
46
46
  typeof spec.name === "string" &&
47
47
  typeof fn === "function");
48
48
  }
49
- //# sourceMappingURL=workflow.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.d.ts","sourceRoot":"","sources":["../workflow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { defineWorkflow, defineWorkflowSpec, isWorkflow } from "./workflow.js";
2
+ import { describe, expect, test } from "vitest";
3
+ describe("defineWorkflowSpec", () => {
4
+ test("returns spec (passthrough)", () => {
5
+ const spec = { name: "test-workflow" };
6
+ const definedSpec = defineWorkflowSpec(spec);
7
+ expect(definedSpec).toStrictEqual(spec);
8
+ });
9
+ });
10
+ describe("defineWorkflow", () => {
11
+ test("returns workflow with spec and fn", () => {
12
+ // eslint-disable-next-line unicorn/consistent-function-scoping
13
+ function fn() {
14
+ return { result: "done" };
15
+ }
16
+ const spec = { name: "test-workflow" };
17
+ const workflow = defineWorkflow(spec, fn);
18
+ expect(workflow).toStrictEqual({
19
+ spec,
20
+ fn,
21
+ });
22
+ });
23
+ });
24
+ describe("isWorkflow", () => {
25
+ test("returns true for valid workflow objects", () => {
26
+ const workflow = defineWorkflow({ name: "test" }, () => "done");
27
+ expect(isWorkflow(workflow)).toBe(true);
28
+ });
29
+ test("returns false for null", () => {
30
+ expect(isWorkflow(null)).toBe(false);
31
+ });
32
+ test("returns false for undefined", () => {
33
+ // eslint-disable-next-line unicorn/no-useless-undefined
34
+ expect(isWorkflow(undefined)).toBe(false);
35
+ });
36
+ test("returns false for primitives", () => {
37
+ expect(isWorkflow("string")).toBe(false);
38
+ expect(isWorkflow(123)).toBe(false);
39
+ expect(isWorkflow(true)).toBe(false);
40
+ });
41
+ test("returns false for objects without spec", () => {
42
+ expect(isWorkflow({ fn: () => "result" })).toBe(false);
43
+ });
44
+ test("returns false for objects without fn", () => {
45
+ expect(isWorkflow({ spec: { name: "test" } })).toBe(false);
46
+ });
47
+ test("returns false for objects with invalid spec", () => {
48
+ expect(isWorkflow({ spec: null, fn: () => "result" })).toBe(false);
49
+ expect(isWorkflow({ spec: "invalid", fn: () => "result" })).toBe(false);
50
+ });
51
+ test("returns false for objects with invalid fn", () => {
52
+ expect(isWorkflow({ spec: { name: "test" }, fn: "not-a-function" })).toBe(false);
53
+ });
54
+ });
55
+ // --- type checks below -------------------------------------------------------
56
+ // they're unused but useful to ensure that the types work as expected for both
57
+ // defineWorkflowSpec and defineWorkflow
58
+ const inferredTypesSpec = defineWorkflowSpec({
59
+ name: "inferred-types",
60
+ });
61
+ defineWorkflow(inferredTypesSpec, async ({ step }) => {
62
+ await step.run({ name: "step-1" }, () => {
63
+ return "success";
64
+ });
65
+ return { result: "done" };
66
+ });
67
+ const explicitInputTypeSpec = defineWorkflowSpec({
68
+ name: "explicit-input-type",
69
+ });
70
+ defineWorkflow(explicitInputTypeSpec, async ({ step }) => {
71
+ await step.run({ name: "step-1" }, () => {
72
+ return "success";
73
+ });
74
+ return { result: "done" };
75
+ });
76
+ const explicitInputAndOutputTypesSpec = defineWorkflowSpec({
77
+ name: "explicit-input-and-output-types",
78
+ });
79
+ defineWorkflow(explicitInputAndOutputTypesSpec, async ({ step }) => {
80
+ await step.run({ name: "step-1" }, () => {
81
+ return "success";
82
+ });
83
+ return { result: "done" };
84
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openworkflow",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Open-source TypeScript framework for building durable, resumable workflows",
5
5
  "keywords": [
6
6
  "durable execution",
@@ -28,13 +28,19 @@
28
28
  "exports": {
29
29
  ".": {
30
30
  "types": "./dist/index.d.ts",
31
- "development": "./index.ts",
32
31
  "default": "./dist/index.js"
33
32
  },
34
33
  "./internal": {
35
34
  "types": "./dist/internal.d.ts",
36
- "development": "./internal.ts",
37
35
  "default": "./dist/internal.js"
36
+ },
37
+ "./postgres": {
38
+ "types": "./dist/postgres.d.ts",
39
+ "default": "./dist/postgres.js"
40
+ },
41
+ "./sqlite": {
42
+ "types": "./dist/sqlite.d.ts",
43
+ "default": "./dist/sqlite.js"
38
44
  }
39
45
  },
40
46
  "bin": {
@@ -51,9 +57,17 @@
51
57
  "devDependencies": {
52
58
  "arktype": "^2.1.29",
53
59
  "valibot": "^1.2.0",
54
- "vitest": "^4.0.16",
60
+ "vitest": "^4.0.18",
55
61
  "yup": "^1.7.1",
56
- "zod": "^4.3.5"
62
+ "zod": "^4.3.6"
63
+ },
64
+ "peerDependencies": {
65
+ "postgres": ">=3"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "postgres": {
69
+ "optional": true
70
+ }
57
71
  },
58
72
  "engines": {
59
73
  "node": ">=20"
@@ -1,44 +0,0 @@
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
@@ -1 +0,0 @@
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"}