@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 CHANGED
@@ -96,27 +96,22 @@ class WorkflowRunner {
96
96
  this.schedulerClient = params.schedulerClient;
97
97
  this.router = params.router;
98
98
  }
99
- run = async (task, logger) => {
100
- const { workflowId, executionId } = task;
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 { executionId, workflow, logger } = params;
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.1.3",
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
+ };
@@ -1,7 +1,7 @@
1
1
  import type { EventEmitter } from "node:events";
2
- import type { Task } from "./runtime";
2
+ import type { ExecutionEvent } from "./event";
3
3
 
4
4
  export type WorkflowInvoker = {
5
5
  workflowEndEmitter: EventEmitter;
6
- execute(task: Task): Promise<void>;
6
+ execute<EventParams>(event: ExecutionEvent<EventParams>): Promise<void>;
7
7
  };
@@ -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 Task = { workflowId: string; executionId: string; params?: any };
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<T>>;
8
+ ) => Promise<void | WorkflowResult<Result>>;
@@ -1,7 +1,8 @@
1
+ import type { ExecutionEvent } from "./event";
2
+
1
3
  export interface SchedulerClient {
2
- requestWakeUp(params: {
3
- workflowId: string;
4
- executionId: string;
5
- resumeIn: number;
6
- }): Promise<void>;
4
+ requestWakeUp<EventParams>(
5
+ event: ExecutionEvent<EventParams>,
6
+ resumeIn?: number
7
+ ): Promise<void>;
7
8
  }
@@ -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 WorkflowGenerator<T = any> = (params: {
6
- executionId: string;
6
+ export type WorkflowGeneratorParams<EventParams> = {
7
+ event: ExecutionEvent<EventParams>;
7
8
  heapClient: HeapClient;
8
9
  logger: Logger;
9
- }) => AsyncGenerator<StepResponse, WorkflowResult<T>, StepResponse>;
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 T
17
+ infer EventParams,
18
+ infer Result
13
19
  >
14
- ? T
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 { Task, TaskProcessor } from "./base/runtime";
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
- TaskProcessor,
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: TaskProcessor = async (task, logger) => {
29
- const { workflowId, executionId } = task;
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<T>(params: {
62
- executionId: string;
63
- workflow: WorkflowGenerator<T>;
57
+ private async runWorkflows<EventParams, Result>(params: {
58
+ workflow: WorkflowGenerator<EventParams, Result>;
59
+ event: ExecutionEvent<EventParams>;
64
60
  logger: Logger;
65
- }): Promise<WorkflowResult<T> | WorkflowDelay> {
66
- const { executionId, workflow, logger } = params;
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<T>;
74
+ return stageResponse as WorkflowResult<Result>;
79
75
  }
80
76
 
81
77
  if (stageResponse instanceof StepDelay) {