@yieldstar/core 0.1.3 → 0.2.0-alpha.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/index.js +8 -13
- package/package.json +3 -2
- package/src/base/event.ts +20 -0
- package/src/base/invoker.ts +2 -2
- package/src/base/runtime.ts +4 -5
- package/src/base/scheduler.ts +6 -5
- package/src/base/workflow.ts +18 -6
- package/src/index.ts +7 -1
- package/src/lib/workflow-runner.ts +15 -19
package/dist/index.js
CHANGED
|
@@ -96,27 +96,22 @@ class WorkflowRunner {
|
|
|
96
96
|
this.schedulerClient = params.schedulerClient;
|
|
97
97
|
this.router = params.router;
|
|
98
98
|
}
|
|
99
|
-
run = async (
|
|
100
|
-
const
|
|
101
|
-
const workflow = this.router[workflowId];
|
|
99
|
+
run = async (event, logger) => {
|
|
100
|
+
const workflow = this.router[event.workflowId];
|
|
102
101
|
if (!workflow) {
|
|
103
|
-
throw new Error(`No workflow registered for "${workflowId}"`);
|
|
102
|
+
throw new Error(`No workflow registered for "${event.workflowId}"`);
|
|
104
103
|
}
|
|
105
104
|
try {
|
|
106
105
|
const response = await this.runWorkflows({
|
|
107
|
-
executionId,
|
|
108
106
|
workflow,
|
|
109
|
-
logger
|
|
107
|
+
logger,
|
|
108
|
+
event
|
|
110
109
|
});
|
|
111
110
|
switch (response.type) {
|
|
112
111
|
case "workflow-result":
|
|
113
112
|
return response;
|
|
114
113
|
case "workflow-delay":
|
|
115
|
-
this.schedulerClient.requestWakeUp(
|
|
116
|
-
workflowId,
|
|
117
|
-
executionId,
|
|
118
|
-
resumeIn: response.resumeIn
|
|
119
|
-
});
|
|
114
|
+
this.schedulerClient.requestWakeUp(event, response.resumeIn);
|
|
120
115
|
break;
|
|
121
116
|
}
|
|
122
117
|
} catch (err) {
|
|
@@ -124,10 +119,10 @@ class WorkflowRunner {
|
|
|
124
119
|
}
|
|
125
120
|
};
|
|
126
121
|
async runWorkflows(params) {
|
|
127
|
-
const {
|
|
122
|
+
const { workflow, event, logger } = params;
|
|
128
123
|
const workflowIterator = workflow({
|
|
124
|
+
event,
|
|
129
125
|
heapClient: this.heapClient,
|
|
130
|
-
executionId,
|
|
131
126
|
logger
|
|
132
127
|
});
|
|
133
128
|
const iteratorResult = await workflowIterator.next();
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yieldstar/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-alpha.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "src/index.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "bun build src/index.ts --outfile dist/index.js --target bun --packages=external"
|
|
8
|
+
"build": "bun build src/index.ts --outfile dist/index.js --target bun --packages=external",
|
|
9
|
+
"check": "tsc --noEmit"
|
|
9
10
|
},
|
|
10
11
|
"devDependencies": {
|
|
11
12
|
"@types/bun": "latest"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type TriggerEvent<
|
|
2
|
+
WorkflowId extends string,
|
|
3
|
+
EventParams = any
|
|
4
|
+
> = EventParams extends void
|
|
5
|
+
? {
|
|
6
|
+
workflowId: WorkflowId;
|
|
7
|
+
executionId?: string;
|
|
8
|
+
params?: undefined;
|
|
9
|
+
}
|
|
10
|
+
: {
|
|
11
|
+
workflowId: WorkflowId;
|
|
12
|
+
executionId?: string;
|
|
13
|
+
params: EventParams;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type ExecutionEvent<EventParams = any> = {
|
|
17
|
+
workflowId: string;
|
|
18
|
+
executionId: string;
|
|
19
|
+
params: EventParams;
|
|
20
|
+
};
|
package/src/base/invoker.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EventEmitter } from "node:events";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ExecutionEvent } from "./event";
|
|
3
3
|
|
|
4
4
|
export type WorkflowInvoker = {
|
|
5
5
|
workflowEndEmitter: EventEmitter;
|
|
6
|
-
execute(
|
|
6
|
+
execute<EventParams>(event: ExecutionEvent<EventParams>): Promise<void>;
|
|
7
7
|
};
|
package/src/base/runtime.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Logger } from "pino";
|
|
2
2
|
import type { WorkflowResult } from "./step";
|
|
3
|
+
import type { ExecutionEvent } from "./event";
|
|
3
4
|
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
export type TaskProcessor = <T = any>(
|
|
7
|
-
task: Task,
|
|
5
|
+
export type EventProcessor<EventParams = any, Result = any> = (
|
|
6
|
+
event: ExecutionEvent<EventParams>,
|
|
8
7
|
logger: Logger
|
|
9
|
-
) => Promise<void | WorkflowResult<
|
|
8
|
+
) => Promise<void | WorkflowResult<Result>>;
|
package/src/base/scheduler.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { ExecutionEvent } from "./event";
|
|
2
|
+
|
|
1
3
|
export interface SchedulerClient {
|
|
2
|
-
requestWakeUp(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}): Promise<void>;
|
|
4
|
+
requestWakeUp<EventParams>(
|
|
5
|
+
event: ExecutionEvent<EventParams>,
|
|
6
|
+
resumeIn?: number
|
|
7
|
+
): Promise<void>;
|
|
7
8
|
}
|
package/src/base/workflow.ts
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import type { Logger } from "pino";
|
|
2
2
|
import { HeapClient } from "./heap";
|
|
3
3
|
import { StepResponse, WorkflowResult } from "./step";
|
|
4
|
+
import type { ExecutionEvent } from "./event";
|
|
4
5
|
|
|
5
|
-
export type
|
|
6
|
-
|
|
6
|
+
export type WorkflowGeneratorParams<EventParams> = {
|
|
7
|
+
event: ExecutionEvent<EventParams>;
|
|
7
8
|
heapClient: HeapClient;
|
|
8
9
|
logger: Logger;
|
|
9
|
-
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type WorkflowGenerator<EventParams, Result> = (
|
|
13
|
+
genParams: WorkflowGeneratorParams<EventParams>
|
|
14
|
+
) => AsyncGenerator<StepResponse, WorkflowResult<Result>, StepResponse>;
|
|
10
15
|
|
|
11
16
|
export type WorkflowGeneratorReturnType<CG> = CG extends WorkflowGenerator<
|
|
12
|
-
infer
|
|
17
|
+
infer EventParams,
|
|
18
|
+
infer Result
|
|
13
19
|
>
|
|
14
|
-
?
|
|
20
|
+
? Result
|
|
15
21
|
: never;
|
|
16
22
|
|
|
17
|
-
export type WorkflowRouter = Record<string, WorkflowGenerator
|
|
23
|
+
export type WorkflowRouter = Record<string, WorkflowGenerator<any, any>>;
|
|
24
|
+
|
|
25
|
+
export type EventOfWorkflow<W extends WorkflowGenerator<any, any>> =
|
|
26
|
+
Parameters<W>[0]["event"];
|
|
27
|
+
|
|
28
|
+
export type EventParamsOf<W extends WorkflowGenerator<any, any>> =
|
|
29
|
+
Parameters<W>[0]["event"]["params"];
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
export type { HeapClient, HeapRecord } from "./base/heap";
|
|
2
2
|
export type { WorkflowInvoker } from "./base/invoker";
|
|
3
|
-
export type {
|
|
3
|
+
export type { EventProcessor } from "./base/runtime";
|
|
4
4
|
export type { SchedulerClient } from "./base/scheduler";
|
|
5
5
|
export type {
|
|
6
6
|
WorkflowGenerator,
|
|
7
7
|
WorkflowGeneratorReturnType,
|
|
8
8
|
WorkflowRouter,
|
|
9
|
+
EventOfWorkflow,
|
|
10
|
+
EventParamsOf,
|
|
9
11
|
} from "./base/workflow";
|
|
12
|
+
export type {
|
|
13
|
+
TriggerEvent as TriggerEvent,
|
|
14
|
+
ExecutionEvent as ExecutionEvent,
|
|
15
|
+
} from "./base/event";
|
|
10
16
|
|
|
11
17
|
export {
|
|
12
18
|
StepCacheCheck,
|
|
@@ -3,12 +3,13 @@ import type {
|
|
|
3
3
|
WorkflowGenerator,
|
|
4
4
|
HeapClient,
|
|
5
5
|
SchedulerClient,
|
|
6
|
-
|
|
6
|
+
EventProcessor,
|
|
7
|
+
ExecutionEvent,
|
|
7
8
|
} from "..";
|
|
8
9
|
import { StepDelay, WorkflowDelay, WorkflowResult } from "..";
|
|
9
10
|
|
|
10
11
|
export class WorkflowRunner<
|
|
11
|
-
Router extends Record<string, WorkflowGenerator<any>>
|
|
12
|
+
Router extends Record<string, WorkflowGenerator<any, any>>
|
|
12
13
|
> {
|
|
13
14
|
private heapClient: HeapClient;
|
|
14
15
|
private schedulerClient: SchedulerClient;
|
|
@@ -25,19 +26,18 @@ export class WorkflowRunner<
|
|
|
25
26
|
this.router = params.router;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
run:
|
|
29
|
-
const
|
|
30
|
-
const workflow = this.router[workflowId];
|
|
29
|
+
run: EventProcessor<any, any> = async (event, logger) => {
|
|
30
|
+
const workflow = this.router[event.workflowId];
|
|
31
31
|
|
|
32
32
|
if (!workflow) {
|
|
33
|
-
throw new Error(`No workflow registered for "${workflowId}"`);
|
|
33
|
+
throw new Error(`No workflow registered for "${event.workflowId}"`);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
try {
|
|
37
37
|
const response = await this.runWorkflows({
|
|
38
|
-
executionId,
|
|
39
38
|
workflow,
|
|
40
39
|
logger,
|
|
40
|
+
event,
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
switch (response.type) {
|
|
@@ -45,11 +45,7 @@ export class WorkflowRunner<
|
|
|
45
45
|
return response;
|
|
46
46
|
|
|
47
47
|
case "workflow-delay":
|
|
48
|
-
this.schedulerClient.requestWakeUp(
|
|
49
|
-
workflowId,
|
|
50
|
-
executionId,
|
|
51
|
-
resumeIn: response.resumeIn,
|
|
52
|
-
});
|
|
48
|
+
this.schedulerClient.requestWakeUp(event, response.resumeIn);
|
|
53
49
|
break;
|
|
54
50
|
}
|
|
55
51
|
} catch (err) {
|
|
@@ -58,16 +54,16 @@ export class WorkflowRunner<
|
|
|
58
54
|
}
|
|
59
55
|
};
|
|
60
56
|
|
|
61
|
-
private async runWorkflows<
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
private async runWorkflows<EventParams, Result>(params: {
|
|
58
|
+
workflow: WorkflowGenerator<EventParams, Result>;
|
|
59
|
+
event: ExecutionEvent<EventParams>;
|
|
64
60
|
logger: Logger;
|
|
65
|
-
}): Promise<WorkflowResult<
|
|
66
|
-
const {
|
|
61
|
+
}): Promise<WorkflowResult<Result> | WorkflowDelay> {
|
|
62
|
+
const { workflow, event, logger } = params;
|
|
67
63
|
|
|
68
64
|
const workflowIterator = workflow({
|
|
65
|
+
event,
|
|
69
66
|
heapClient: this.heapClient,
|
|
70
|
-
executionId,
|
|
71
67
|
logger,
|
|
72
68
|
});
|
|
73
69
|
|
|
@@ -75,7 +71,7 @@ export class WorkflowRunner<
|
|
|
75
71
|
const stageResponse = iteratorResult.value;
|
|
76
72
|
|
|
77
73
|
if (iteratorResult.done) {
|
|
78
|
-
return stageResponse as WorkflowResult<
|
|
74
|
+
return stageResponse as WorkflowResult<Result>;
|
|
79
75
|
}
|
|
80
76
|
|
|
81
77
|
if (stageResponse instanceof StepDelay) {
|