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
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
import { BackendPostgres } from "../../backend-postgres/backend.js";
|
|
2
|
-
import { DEFAULT_DATABASE_URL } from "../../backend-postgres/postgres.js";
|
|
3
|
-
import { OpenWorkflow } from "../sdk/sdk.js";
|
|
4
|
-
import { randomUUID } from "node:crypto";
|
|
5
|
-
import { describe, test, expect } from "vitest";
|
|
6
|
-
describe("StepExecutor", () => {
|
|
7
|
-
test("executes step and returns result", async () => {
|
|
8
|
-
const backend = await createBackend();
|
|
9
|
-
const client = new OpenWorkflow({ backend });
|
|
10
|
-
const workflow = client.defineWorkflow({ name: "executor-basic" }, async ({ step }) => {
|
|
11
|
-
const result = await step.run({ name: "add" }, () => 5 + 3);
|
|
12
|
-
return result;
|
|
13
|
-
});
|
|
14
|
-
const worker = client.newWorker();
|
|
15
|
-
const handle = await workflow.run();
|
|
16
|
-
await worker.tick();
|
|
17
|
-
const result = await handle.result();
|
|
18
|
-
expect(result).toBe(8);
|
|
19
|
-
});
|
|
20
|
-
test("caches step results for same step name", async () => {
|
|
21
|
-
const backend = await createBackend();
|
|
22
|
-
const client = new OpenWorkflow({ backend });
|
|
23
|
-
let executionCount = 0;
|
|
24
|
-
const workflow = client.defineWorkflow({ name: "executor-cached" }, async ({ step }) => {
|
|
25
|
-
const first = await step.run({ name: "cached-step" }, () => {
|
|
26
|
-
executionCount++;
|
|
27
|
-
return "first-execution";
|
|
28
|
-
});
|
|
29
|
-
const second = await step.run({ name: "cached-step" }, () => {
|
|
30
|
-
executionCount++;
|
|
31
|
-
return "second-execution";
|
|
32
|
-
});
|
|
33
|
-
return { first, second };
|
|
34
|
-
});
|
|
35
|
-
const worker = client.newWorker();
|
|
36
|
-
const handle = await workflow.run();
|
|
37
|
-
await worker.tick();
|
|
38
|
-
const result = await handle.result();
|
|
39
|
-
expect(result).toEqual({
|
|
40
|
-
first: "first-execution",
|
|
41
|
-
second: "first-execution",
|
|
42
|
-
});
|
|
43
|
-
expect(executionCount).toBe(1);
|
|
44
|
-
});
|
|
45
|
-
test("different step names execute independently", async () => {
|
|
46
|
-
const backend = await createBackend();
|
|
47
|
-
const client = new OpenWorkflow({ backend });
|
|
48
|
-
let executionCount = 0;
|
|
49
|
-
const workflow = client.defineWorkflow({ name: "executor-different-steps" }, async ({ step }) => {
|
|
50
|
-
const first = await step.run({ name: "step-1" }, () => {
|
|
51
|
-
executionCount++;
|
|
52
|
-
return "a";
|
|
53
|
-
});
|
|
54
|
-
const second = await step.run({ name: "step-2" }, () => {
|
|
55
|
-
executionCount++;
|
|
56
|
-
return "b";
|
|
57
|
-
});
|
|
58
|
-
return { first, second };
|
|
59
|
-
});
|
|
60
|
-
const worker = client.newWorker();
|
|
61
|
-
const handle = await workflow.run();
|
|
62
|
-
await worker.tick();
|
|
63
|
-
const result = await handle.result();
|
|
64
|
-
expect(result).toEqual({ first: "a", second: "b" });
|
|
65
|
-
expect(executionCount).toBe(2);
|
|
66
|
-
});
|
|
67
|
-
test("propagates step errors with deadline exceeded", async () => {
|
|
68
|
-
const backend = await createBackend();
|
|
69
|
-
const client = new OpenWorkflow({ backend });
|
|
70
|
-
const workflow = client.defineWorkflow({ name: "executor-error" }, async ({ step }) => {
|
|
71
|
-
await step.run({ name: "failing-step" }, () => {
|
|
72
|
-
throw new Error("Step failed intentionally");
|
|
73
|
-
});
|
|
74
|
-
return "should not reach";
|
|
75
|
-
});
|
|
76
|
-
const worker = client.newWorker();
|
|
77
|
-
// Use deadline to force immediate failure without retries
|
|
78
|
-
const handle = await workflow.run({}, { deadlineAt: new Date() });
|
|
79
|
-
await worker.tick();
|
|
80
|
-
await sleep(100);
|
|
81
|
-
await expect(handle.result()).rejects.toThrow(/deadline exceeded/);
|
|
82
|
-
});
|
|
83
|
-
test("sleep puts workflow in sleeping status", async () => {
|
|
84
|
-
const backend = await createBackend();
|
|
85
|
-
const client = new OpenWorkflow({ backend });
|
|
86
|
-
const workflow = client.defineWorkflow({ name: "executor-sleep" }, async ({ step }) => {
|
|
87
|
-
await step.sleep("sleep-1", "5s");
|
|
88
|
-
return "after sleep";
|
|
89
|
-
});
|
|
90
|
-
const handle = await workflow.run();
|
|
91
|
-
const worker = client.newWorker();
|
|
92
|
-
await worker.tick();
|
|
93
|
-
const workflowRun = await backend.getWorkflowRun({
|
|
94
|
-
workflowRunId: handle.workflowRun.id,
|
|
95
|
-
});
|
|
96
|
-
expect(workflowRun?.status).toBe("sleeping");
|
|
97
|
-
expect(workflowRun?.availableAt).not.toBeNull();
|
|
98
|
-
});
|
|
99
|
-
test("workflow resumes after sleep duration", async () => {
|
|
100
|
-
const backend = await createBackend();
|
|
101
|
-
const client = new OpenWorkflow({ backend });
|
|
102
|
-
const workflow = client.defineWorkflow({ name: "resume-after-sleep" }, async ({ step }) => {
|
|
103
|
-
const value = await step.run({ name: "before" }, () => 5);
|
|
104
|
-
await step.sleep("wait", "10ms");
|
|
105
|
-
return value + 10;
|
|
106
|
-
});
|
|
107
|
-
const handle = await workflow.run();
|
|
108
|
-
const worker = client.newWorker();
|
|
109
|
-
// First tick - hits sleep
|
|
110
|
-
await worker.tick();
|
|
111
|
-
await sleep(50); // Wait for tick to complete
|
|
112
|
-
const sleeping = await backend.getWorkflowRun({
|
|
113
|
-
workflowRunId: handle.workflowRun.id,
|
|
114
|
-
});
|
|
115
|
-
expect(sleeping?.status).toBe("sleeping");
|
|
116
|
-
// Wait for sleep to elapse
|
|
117
|
-
await sleep(50);
|
|
118
|
-
// Second tick - completes
|
|
119
|
-
await worker.tick();
|
|
120
|
-
const result = await handle.result();
|
|
121
|
-
expect(result).toBe(15);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe("executeWorkflow", () => {
|
|
125
|
-
describe("successful execution", () => {
|
|
126
|
-
test("executes a simple workflow", async () => {
|
|
127
|
-
const backend = await createBackend();
|
|
128
|
-
const client = new OpenWorkflow({ backend });
|
|
129
|
-
const workflow = client.defineWorkflow({ name: "simple-workflow" }, ({ input }) => {
|
|
130
|
-
return input.a + input.b;
|
|
131
|
-
});
|
|
132
|
-
const worker = client.newWorker();
|
|
133
|
-
const handle = await workflow.run({ a: 10, b: 5 });
|
|
134
|
-
await worker.tick();
|
|
135
|
-
const result = await handle.result();
|
|
136
|
-
expect(result).toBe(15);
|
|
137
|
-
});
|
|
138
|
-
test("executes a multi-step workflow", async () => {
|
|
139
|
-
const backend = await createBackend();
|
|
140
|
-
const client = new OpenWorkflow({ backend });
|
|
141
|
-
const workflow = client.defineWorkflow({ name: "multi-step-workflow" }, async ({ input, step }) => {
|
|
142
|
-
const sum = await step.run({ name: "add" }, () => input.value + 5);
|
|
143
|
-
const product = await step.run({ name: "multiply" }, () => sum * 2);
|
|
144
|
-
return product;
|
|
145
|
-
});
|
|
146
|
-
const worker = client.newWorker();
|
|
147
|
-
const handle = await workflow.run({ value: 10 });
|
|
148
|
-
await worker.tick();
|
|
149
|
-
const result = await handle.result();
|
|
150
|
-
expect(result).toBe(30);
|
|
151
|
-
});
|
|
152
|
-
test("returns null for workflows without return", async () => {
|
|
153
|
-
const backend = await createBackend();
|
|
154
|
-
const client = new OpenWorkflow({ backend });
|
|
155
|
-
const workflow = client.defineWorkflow({ name: "void-workflow" }, () => null);
|
|
156
|
-
const worker = client.newWorker();
|
|
157
|
-
const handle = await workflow.run();
|
|
158
|
-
await worker.tick();
|
|
159
|
-
const result = await handle.result();
|
|
160
|
-
expect(result).toBeNull();
|
|
161
|
-
});
|
|
162
|
-
test("returns null from workflow", async () => {
|
|
163
|
-
const backend = await createBackend();
|
|
164
|
-
const client = new OpenWorkflow({ backend });
|
|
165
|
-
const workflow = client.defineWorkflow({ name: "null-workflow" }, () => null);
|
|
166
|
-
const worker = client.newWorker();
|
|
167
|
-
const handle = await workflow.run();
|
|
168
|
-
await worker.tick();
|
|
169
|
-
const result = await handle.result();
|
|
170
|
-
expect(result).toBeNull();
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
describe("error handling", () => {
|
|
174
|
-
test("handles workflow errors with deadline exceeded", async () => {
|
|
175
|
-
const backend = await createBackend();
|
|
176
|
-
const client = new OpenWorkflow({ backend });
|
|
177
|
-
const workflow = client.defineWorkflow({ name: "failing-workflow" }, () => {
|
|
178
|
-
throw new Error("Workflow error");
|
|
179
|
-
});
|
|
180
|
-
const worker = client.newWorker();
|
|
181
|
-
// Use deadline to skip retries - fails with deadline exceeded
|
|
182
|
-
const handle = await workflow.run({}, { deadlineAt: new Date() });
|
|
183
|
-
await worker.tick();
|
|
184
|
-
await sleep(100);
|
|
185
|
-
await expect(handle.result()).rejects.toThrow(/deadline exceeded/);
|
|
186
|
-
});
|
|
187
|
-
test("handles step errors with deadline exceeded", async () => {
|
|
188
|
-
const backend = await createBackend();
|
|
189
|
-
const client = new OpenWorkflow({ backend });
|
|
190
|
-
const workflow = client.defineWorkflow({ name: "step-error-workflow" }, async ({ step }) => {
|
|
191
|
-
await step.run({ name: "failing" }, () => {
|
|
192
|
-
throw new Error("Step error");
|
|
193
|
-
});
|
|
194
|
-
return "unreachable";
|
|
195
|
-
});
|
|
196
|
-
const worker = client.newWorker();
|
|
197
|
-
const handle = await workflow.run({}, { deadlineAt: new Date() });
|
|
198
|
-
await worker.tick();
|
|
199
|
-
await sleep(100);
|
|
200
|
-
await expect(handle.result()).rejects.toThrow(/deadline exceeded/);
|
|
201
|
-
});
|
|
202
|
-
test("serializes non-Error exceptions", async () => {
|
|
203
|
-
const backend = await createBackend();
|
|
204
|
-
const client = new OpenWorkflow({ backend });
|
|
205
|
-
const workflow = client.defineWorkflow({ name: "non-error-workflow" }, async ({ step }) => {
|
|
206
|
-
await step.run({ name: "throw-object" }, () => {
|
|
207
|
-
// eslint-disable-next-line @typescript-eslint/only-throw-error
|
|
208
|
-
throw { custom: "error", code: 500 };
|
|
209
|
-
});
|
|
210
|
-
return "nope";
|
|
211
|
-
});
|
|
212
|
-
const worker = client.newWorker();
|
|
213
|
-
const handle = await workflow.run({}, { deadlineAt: new Date() });
|
|
214
|
-
await worker.tick();
|
|
215
|
-
await sleep(100);
|
|
216
|
-
await expect(handle.result()).rejects.toThrow();
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
describe("sleep handling", () => {
|
|
220
|
-
test("workflow enters sleeping status", async () => {
|
|
221
|
-
const backend = await createBackend();
|
|
222
|
-
const client = new OpenWorkflow({ backend });
|
|
223
|
-
const workflow = client.defineWorkflow({ name: "sleep-workflow" }, async ({ step }) => {
|
|
224
|
-
await step.sleep("wait", "5s");
|
|
225
|
-
return "after sleep";
|
|
226
|
-
});
|
|
227
|
-
const handle = await workflow.run();
|
|
228
|
-
const worker = client.newWorker();
|
|
229
|
-
await worker.tick();
|
|
230
|
-
const workflowRun = await backend.getWorkflowRun({
|
|
231
|
-
workflowRunId: handle.workflowRun.id,
|
|
232
|
-
});
|
|
233
|
-
expect(workflowRun?.status).toBe("sleeping");
|
|
234
|
-
});
|
|
235
|
-
test("resumes workflow after sleep duration", async () => {
|
|
236
|
-
const backend = await createBackend();
|
|
237
|
-
const client = new OpenWorkflow({ backend });
|
|
238
|
-
const workflow = client.defineWorkflow({ name: "resume-after-sleep" }, async ({ input, step }) => {
|
|
239
|
-
const sum = await step.run({ name: "add" }, () => input.value + 1);
|
|
240
|
-
await step.sleep("wait", "10ms");
|
|
241
|
-
return sum + 10;
|
|
242
|
-
});
|
|
243
|
-
const handle = await workflow.run({ value: 5 });
|
|
244
|
-
const worker = client.newWorker();
|
|
245
|
-
// first tick - hits sleep
|
|
246
|
-
await worker.tick();
|
|
247
|
-
await sleep(50);
|
|
248
|
-
const sleeping = await backend.getWorkflowRun({
|
|
249
|
-
workflowRunId: handle.workflowRun.id,
|
|
250
|
-
});
|
|
251
|
-
expect(sleeping?.status).toBe("sleeping");
|
|
252
|
-
// wait for sleep
|
|
253
|
-
await sleep(50);
|
|
254
|
-
await worker.tick();
|
|
255
|
-
const result = await handle.result();
|
|
256
|
-
expect(result).toBe(16);
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
describe("workflow with complex data", () => {
|
|
260
|
-
test("handles objects as input and output", async () => {
|
|
261
|
-
const backend = await createBackend();
|
|
262
|
-
const client = new OpenWorkflow({ backend });
|
|
263
|
-
const workflow = client.defineWorkflow({ name: "user-workflow" }, ({ input }) => {
|
|
264
|
-
return {
|
|
265
|
-
greeting: `Hello, ${input.name}! You are ${String(input.age)} years old.`,
|
|
266
|
-
processed: true,
|
|
267
|
-
};
|
|
268
|
-
});
|
|
269
|
-
const worker = client.newWorker();
|
|
270
|
-
const handle = await workflow.run({ name: "Alice", age: 30 });
|
|
271
|
-
await worker.tick();
|
|
272
|
-
const result = await handle.result();
|
|
273
|
-
expect(result).toEqual({
|
|
274
|
-
greeting: "Hello, Alice! You are 30 years old.",
|
|
275
|
-
processed: true,
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
test("handles arrays in workflow", async () => {
|
|
279
|
-
const backend = await createBackend();
|
|
280
|
-
const client = new OpenWorkflow({ backend });
|
|
281
|
-
const workflow = client.defineWorkflow({ name: "array-workflow" }, ({ input }) => {
|
|
282
|
-
return input.numbers.reduce((a, b) => a + b, 0);
|
|
283
|
-
});
|
|
284
|
-
const worker = client.newWorker();
|
|
285
|
-
const handle = await workflow.run({ numbers: [1, 2, 3, 4, 5] });
|
|
286
|
-
await worker.tick();
|
|
287
|
-
const result = await handle.result();
|
|
288
|
-
expect(result).toBe(15);
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
describe("result type handling", () => {
|
|
292
|
-
test("returns success with numeric result", async () => {
|
|
293
|
-
const backend = await createBackend();
|
|
294
|
-
const client = new OpenWorkflow({ backend });
|
|
295
|
-
const workflow = client.defineWorkflow({ name: "numeric-result" }, async ({ step }) => {
|
|
296
|
-
return await step.run({ name: "compute" }, () => 100 + 200);
|
|
297
|
-
});
|
|
298
|
-
const worker = client.newWorker();
|
|
299
|
-
const handle = await workflow.run();
|
|
300
|
-
await worker.tick();
|
|
301
|
-
const result = await handle.result();
|
|
302
|
-
expect(result).toBe(300);
|
|
303
|
-
});
|
|
304
|
-
test("returns success with string result", async () => {
|
|
305
|
-
const backend = await createBackend();
|
|
306
|
-
const client = new OpenWorkflow({ backend });
|
|
307
|
-
const workflow = client.defineWorkflow({ name: "string-result" }, ({ input }) => {
|
|
308
|
-
return input.text.toUpperCase();
|
|
309
|
-
});
|
|
310
|
-
const worker = client.newWorker();
|
|
311
|
-
const handle = await workflow.run({ text: "hello world" });
|
|
312
|
-
await worker.tick();
|
|
313
|
-
const result = await handle.result();
|
|
314
|
-
expect(result).toBe("HELLO WORLD");
|
|
315
|
-
});
|
|
316
|
-
test("returns success with boolean result", async () => {
|
|
317
|
-
const backend = await createBackend();
|
|
318
|
-
const client = new OpenWorkflow({ backend });
|
|
319
|
-
const workflow = client.defineWorkflow({ name: "bool-result" }, ({ input }) => {
|
|
320
|
-
return input.value > 0;
|
|
321
|
-
});
|
|
322
|
-
const worker = client.newWorker();
|
|
323
|
-
const handle = await workflow.run({ value: 42 });
|
|
324
|
-
await worker.tick();
|
|
325
|
-
const result = await handle.result();
|
|
326
|
-
expect(result).toBe(true);
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
describe("step execution order", () => {
|
|
330
|
-
test("executes steps in sequence", async () => {
|
|
331
|
-
const backend = await createBackend();
|
|
332
|
-
const client = new OpenWorkflow({ backend });
|
|
333
|
-
const order = [];
|
|
334
|
-
const workflow = client.defineWorkflow({ name: "sequence-workflow" }, async ({ step }) => {
|
|
335
|
-
await step.run({ name: "first" }, () => order.push("first"));
|
|
336
|
-
await step.run({ name: "second" }, () => order.push("second"));
|
|
337
|
-
await step.run({ name: "third" }, () => order.push("third"));
|
|
338
|
-
return order;
|
|
339
|
-
});
|
|
340
|
-
const worker = client.newWorker();
|
|
341
|
-
const handle = await workflow.run();
|
|
342
|
-
await worker.tick();
|
|
343
|
-
const result = await handle.result();
|
|
344
|
-
expect(result).toEqual(["first", "second", "third"]);
|
|
345
|
-
});
|
|
346
|
-
});
|
|
347
|
-
describe("version handling", () => {
|
|
348
|
-
test("passes version to workflow function", async () => {
|
|
349
|
-
const backend = await createBackend();
|
|
350
|
-
const client = new OpenWorkflow({ backend });
|
|
351
|
-
const workflow = client.defineWorkflow({ name: "version-workflow", version: "1.0.0" }, ({ version }) => {
|
|
352
|
-
return { receivedVersion: version };
|
|
353
|
-
});
|
|
354
|
-
const worker = client.newWorker();
|
|
355
|
-
const handle = await workflow.run();
|
|
356
|
-
await worker.tick();
|
|
357
|
-
const result = await handle.result();
|
|
358
|
-
expect(result).toEqual({ receivedVersion: "1.0.0" });
|
|
359
|
-
});
|
|
360
|
-
test("passes null version when not specified", async () => {
|
|
361
|
-
const backend = await createBackend();
|
|
362
|
-
const client = new OpenWorkflow({ backend });
|
|
363
|
-
const workflow = client.defineWorkflow({ name: "no-version-workflow" }, ({ version }) => {
|
|
364
|
-
return { receivedVersion: version };
|
|
365
|
-
});
|
|
366
|
-
const worker = client.newWorker();
|
|
367
|
-
const handle = await workflow.run();
|
|
368
|
-
await worker.tick();
|
|
369
|
-
const result = await handle.result();
|
|
370
|
-
expect(result).toEqual({ receivedVersion: null });
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
|
-
async function createBackend() {
|
|
375
|
-
return await BackendPostgres.connect(DEFAULT_DATABASE_URL, {
|
|
376
|
-
namespaceId: randomUUID(),
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
function sleep(ms) {
|
|
380
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
381
|
-
}
|
|
382
|
-
//# sourceMappingURL=execution.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution.test.js","sourceRoot":"","sources":["../../execution/execution.test.ts"],"names":[],"mappings":"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"}
|
package/dist/global.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { OpenWorkflow } from "./sdk/sdk.js";
|
|
2
|
-
/**
|
|
3
|
-
* Get the global OpenWorkflow client instance.
|
|
4
|
-
* This function lazily loads the configuration file and creates a singleton
|
|
5
|
-
* instance on first access.
|
|
6
|
-
*
|
|
7
|
-
* The global client is useful for:
|
|
8
|
-
* - Zero-config DX where you want a single shared client
|
|
9
|
-
* - CLI tools that need to access the configured client
|
|
10
|
-
* - Testing scenarios where you can override the client with setGlobalClient()
|
|
11
|
-
*
|
|
12
|
-
* Note: This function requires Node.js and will only work in Node environments.
|
|
13
|
-
* For non-Node environments (browser, edge), create OpenWorkflow instances manually.
|
|
14
|
-
*
|
|
15
|
-
* @returns The global OpenWorkflow client instance
|
|
16
|
-
* @throws Error if config file is not found or invalid
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* import { getGlobalClient } from 'openworkflow';
|
|
21
|
-
*
|
|
22
|
-
* const ow = await getGlobalClient();
|
|
23
|
-
* await ow.run(myWorkflow, { input: 'data' });
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare function getGlobalClient(): Promise<OpenWorkflow>;
|
|
27
|
-
/**
|
|
28
|
-
* Set the global OpenWorkflow client instance.
|
|
29
|
-
* This is primarily useful for testing scenarios where you want to override
|
|
30
|
-
* the default client with a mock or test instance.
|
|
31
|
-
*
|
|
32
|
-
* @param client - The OpenWorkflow instance to set as the global client
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* import { setGlobalClient, OpenWorkflow } from 'openworkflow';
|
|
37
|
-
* import { BackendSqlite } from '@openworkflow/backend-sqlite';
|
|
38
|
-
*
|
|
39
|
-
* // In tests
|
|
40
|
-
* const testClient = new OpenWorkflow({
|
|
41
|
-
* backend: BackendSqlite.connect(':memory:')
|
|
42
|
-
* });
|
|
43
|
-
* setGlobalClient(testClient);
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export declare function setGlobalClient(client: OpenWorkflow): void;
|
|
47
|
-
/**
|
|
48
|
-
* Reset the global client to null.
|
|
49
|
-
* This is primarily useful for testing to ensure a clean state between tests.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* import { resetGlobalClient } from 'openworkflow';
|
|
54
|
-
*
|
|
55
|
-
* // In test cleanup
|
|
56
|
-
* afterEach(() => {
|
|
57
|
-
* resetGlobalClient();
|
|
58
|
-
* });
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export declare function resetGlobalClient(): void;
|
|
62
|
-
//# sourceMappingURL=global.d.ts.map
|
package/dist/global.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../global.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AASjD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAQ7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
package/dist/global.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { loadConfig } from "./config.js";
|
|
2
|
-
/**
|
|
3
|
-
* Global singleton OpenWorkflow client instance.
|
|
4
|
-
* This is lazily initialized when getGlobalClient() is first called.
|
|
5
|
-
*/
|
|
6
|
-
let globalClient = null;
|
|
7
|
-
/**
|
|
8
|
-
* Get the global OpenWorkflow client instance.
|
|
9
|
-
* This function lazily loads the configuration file and creates a singleton
|
|
10
|
-
* instance on first access.
|
|
11
|
-
*
|
|
12
|
-
* The global client is useful for:
|
|
13
|
-
* - Zero-config DX where you want a single shared client
|
|
14
|
-
* - CLI tools that need to access the configured client
|
|
15
|
-
* - Testing scenarios where you can override the client with setGlobalClient()
|
|
16
|
-
*
|
|
17
|
-
* Note: This function requires Node.js and will only work in Node environments.
|
|
18
|
-
* For non-Node environments (browser, edge), create OpenWorkflow instances manually.
|
|
19
|
-
*
|
|
20
|
-
* @returns The global OpenWorkflow client instance
|
|
21
|
-
* @throws Error if config file is not found or invalid
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* import { getGlobalClient } from 'openworkflow';
|
|
26
|
-
*
|
|
27
|
-
* const ow = await getGlobalClient();
|
|
28
|
-
* await ow.run(myWorkflow, { input: 'data' });
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export async function getGlobalClient() {
|
|
32
|
-
if (globalClient) {
|
|
33
|
-
return globalClient;
|
|
34
|
-
}
|
|
35
|
-
const config = await loadConfig();
|
|
36
|
-
globalClient = config.ow;
|
|
37
|
-
return globalClient;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Set the global OpenWorkflow client instance.
|
|
41
|
-
* This is primarily useful for testing scenarios where you want to override
|
|
42
|
-
* the default client with a mock or test instance.
|
|
43
|
-
*
|
|
44
|
-
* @param client - The OpenWorkflow instance to set as the global client
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```typescript
|
|
48
|
-
* import { setGlobalClient, OpenWorkflow } from 'openworkflow';
|
|
49
|
-
* import { BackendSqlite } from '@openworkflow/backend-sqlite';
|
|
50
|
-
*
|
|
51
|
-
* // In tests
|
|
52
|
-
* const testClient = new OpenWorkflow({
|
|
53
|
-
* backend: BackendSqlite.connect(':memory:')
|
|
54
|
-
* });
|
|
55
|
-
* setGlobalClient(testClient);
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
export function setGlobalClient(client) {
|
|
59
|
-
globalClient = client;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Reset the global client to null.
|
|
63
|
-
* This is primarily useful for testing to ensure a clean state between tests.
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* import { resetGlobalClient } from 'openworkflow';
|
|
68
|
-
*
|
|
69
|
-
* // In test cleanup
|
|
70
|
-
* afterEach(() => {
|
|
71
|
-
* resetGlobalClient();
|
|
72
|
-
* });
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export function resetGlobalClient() {
|
|
76
|
-
globalClient = null;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=global.js.map
|
package/dist/global.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../global.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|