bunqueue 2.6.116 → 2.7.1
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 +86 -0
- package/dist/client/workflow/emitter.d.ts +18 -0
- package/dist/client/workflow/emitter.d.ts.map +1 -0
- package/dist/client/workflow/emitter.js +75 -0
- package/dist/client/workflow/emitter.js.map +1 -0
- package/dist/client/workflow/engine.d.ts +41 -0
- package/dist/client/workflow/engine.d.ts.map +1 -0
- package/dist/client/workflow/engine.js +103 -0
- package/dist/client/workflow/engine.js.map +1 -0
- package/dist/client/workflow/executor.d.ts +34 -0
- package/dist/client/workflow/executor.d.ts.map +1 -0
- package/dist/client/workflow/executor.js +241 -0
- package/dist/client/workflow/executor.js.map +1 -0
- package/dist/client/workflow/index.d.ts +23 -0
- package/dist/client/workflow/index.d.ts.map +1 -0
- package/dist/client/workflow/index.js +22 -0
- package/dist/client/workflow/index.js.map +1 -0
- package/dist/client/workflow/runner.d.ts +21 -0
- package/dist/client/workflow/runner.d.ts.map +1 -0
- package/dist/client/workflow/runner.js +157 -0
- package/dist/client/workflow/runner.js.map +1 -0
- package/dist/client/workflow/store.d.ts +22 -0
- package/dist/client/workflow/store.d.ts.map +1 -0
- package/dist/client/workflow/store.js +160 -0
- package/dist/client/workflow/store.js.map +1 -0
- package/dist/client/workflow/types.d.ts +150 -0
- package/dist/client/workflow/types.d.ts.map +1 -0
- package/dist/client/workflow/types.js +5 -0
- package/dist/client/workflow/types.js.map +1 -0
- package/dist/client/workflow/workflow.d.ts +27 -0
- package/dist/client/workflow/workflow.d.ts.map +1 -0
- package/dist/client/workflow/workflow.js +102 -0
- package/dist/client/workflow/workflow.js.map +1 -0
- package/package.json +17 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow - DSL builder for defining workflow step graphs
|
|
3
|
+
* Pure data structure, no side effects.
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowNode, StepHandler, StepOptions, StepContext, BranchCondition } from './types';
|
|
6
|
+
export declare class Workflow<TInput = unknown> {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly nodes: WorkflowNode[];
|
|
9
|
+
constructor(name: string);
|
|
10
|
+
/** Add a step to the workflow */
|
|
11
|
+
step(name: string, handler: StepHandler<TInput>, options?: StepOptions<TInput>): this;
|
|
12
|
+
/** Add a branch point — call .path() after this to define paths */
|
|
13
|
+
branch(condition: BranchCondition): this;
|
|
14
|
+
/** Define a branch path (must follow a .branch() call) */
|
|
15
|
+
path(name: string, builder: (w: Workflow<TInput>) => Workflow<TInput>): this;
|
|
16
|
+
/** Run multiple steps in parallel */
|
|
17
|
+
parallel(builder: (w: Workflow<TInput>) => Workflow<TInput>): this;
|
|
18
|
+
/** Call another registered workflow as a step */
|
|
19
|
+
subWorkflow(name: string, inputMapper: (ctx: StepContext<TInput>) => unknown): this;
|
|
20
|
+
/** Wait for an external signal before continuing */
|
|
21
|
+
waitFor(event: string, options?: {
|
|
22
|
+
timeout?: number;
|
|
23
|
+
}): this;
|
|
24
|
+
/** Get flat list of step names for validation */
|
|
25
|
+
getStepNames(): string[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/client/workflow/workflow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,WAAW,EAEX,WAAW,EACX,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB,qBAAa,QAAQ,CAAC,MAAM,GAAG,OAAO;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAM;gBAExB,IAAI,EAAE,MAAM;IAIxB,iCAAiC;IACjC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAcrF,mEAAmE;IACnE,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAQxC,0DAA0D;IAC1D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAc5E,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAalE,iDAAiD;IACjD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,IAAI;IASnF,oDAAoD;IACpD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAS5D,iDAAiD;IACjD,YAAY,IAAI,MAAM,EAAE;CAiBzB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow - DSL builder for defining workflow step graphs
|
|
3
|
+
* Pure data structure, no side effects.
|
|
4
|
+
*/
|
|
5
|
+
export class Workflow {
|
|
6
|
+
name;
|
|
7
|
+
nodes = [];
|
|
8
|
+
constructor(name) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
}
|
|
11
|
+
/** Add a step to the workflow */
|
|
12
|
+
step(name, handler, options) {
|
|
13
|
+
this.nodes.push({
|
|
14
|
+
type: 'step',
|
|
15
|
+
def: {
|
|
16
|
+
name,
|
|
17
|
+
handler: handler,
|
|
18
|
+
compensate: options?.compensate,
|
|
19
|
+
retry: options?.retry ?? 3,
|
|
20
|
+
timeout: options?.timeout ?? 30_000,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
/** Add a branch point — call .path() after this to define paths */
|
|
26
|
+
branch(condition) {
|
|
27
|
+
this.nodes.push({
|
|
28
|
+
type: 'branch',
|
|
29
|
+
def: { condition, paths: new Map() },
|
|
30
|
+
});
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
/** Define a branch path (must follow a .branch() call) */
|
|
34
|
+
path(name, builder) {
|
|
35
|
+
const lastNode = this.nodes[this.nodes.length - 1];
|
|
36
|
+
if (lastNode?.type !== 'branch') {
|
|
37
|
+
throw new Error('path() must follow a branch() call');
|
|
38
|
+
}
|
|
39
|
+
const sub = new Workflow(`${this.name}:${name}`);
|
|
40
|
+
builder(sub);
|
|
41
|
+
const steps = sub.nodes
|
|
42
|
+
.filter((n) => n.type === 'step')
|
|
43
|
+
.map((n) => n.def);
|
|
44
|
+
lastNode.def.paths.set(name, steps);
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
/** Run multiple steps in parallel */
|
|
48
|
+
parallel(builder) {
|
|
49
|
+
const sub = new Workflow(`${this.name}:parallel`);
|
|
50
|
+
builder(sub);
|
|
51
|
+
const steps = sub.nodes
|
|
52
|
+
.filter((n) => n.type === 'step')
|
|
53
|
+
.map((n) => n.def);
|
|
54
|
+
if (steps.length === 0) {
|
|
55
|
+
throw new Error('parallel() requires at least one step');
|
|
56
|
+
}
|
|
57
|
+
this.nodes.push({ type: 'parallel', def: { steps } });
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/** Call another registered workflow as a step */
|
|
61
|
+
subWorkflow(name, inputMapper) {
|
|
62
|
+
this.nodes.push({
|
|
63
|
+
type: 'subWorkflow',
|
|
64
|
+
name,
|
|
65
|
+
inputMapper: inputMapper,
|
|
66
|
+
});
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
/** Wait for an external signal before continuing */
|
|
70
|
+
waitFor(event, options) {
|
|
71
|
+
this.nodes.push({
|
|
72
|
+
type: 'waitFor',
|
|
73
|
+
event,
|
|
74
|
+
timeout: options?.timeout,
|
|
75
|
+
});
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
/** Get flat list of step names for validation */
|
|
79
|
+
getStepNames() {
|
|
80
|
+
const names = [];
|
|
81
|
+
for (const node of this.nodes) {
|
|
82
|
+
if (node.type === 'step') {
|
|
83
|
+
names.push(node.def.name);
|
|
84
|
+
}
|
|
85
|
+
else if (node.type === 'branch') {
|
|
86
|
+
for (const steps of node.def.paths.values()) {
|
|
87
|
+
for (const s of steps)
|
|
88
|
+
names.push(s.name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (node.type === 'parallel') {
|
|
92
|
+
for (const s of node.def.steps)
|
|
93
|
+
names.push(s.name);
|
|
94
|
+
}
|
|
95
|
+
else if (node.type === 'subWorkflow') {
|
|
96
|
+
names.push(`sub:${node.name}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return names;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/client/workflow/workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunqueue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "High-performance job queue for Bun & AI agents. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks, native MCP server. Zero external dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
"./mcp": {
|
|
26
26
|
"types": "./dist/mcp/index.d.ts",
|
|
27
27
|
"import": "./dist/mcp/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./workflow": {
|
|
30
|
+
"types": "./dist/client/workflow/index.d.ts",
|
|
31
|
+
"import": "./dist/client/workflow/index.js"
|
|
28
32
|
}
|
|
29
33
|
},
|
|
30
34
|
"files": [
|
|
@@ -105,7 +109,18 @@
|
|
|
105
109
|
"mcp",
|
|
106
110
|
"model-context-protocol",
|
|
107
111
|
"agentic",
|
|
108
|
-
"automation"
|
|
112
|
+
"automation",
|
|
113
|
+
"workflow",
|
|
114
|
+
"workflow-engine",
|
|
115
|
+
"orchestration",
|
|
116
|
+
"saga",
|
|
117
|
+
"saga-pattern",
|
|
118
|
+
"temporal-alternative",
|
|
119
|
+
"inngest-alternative",
|
|
120
|
+
"step-functions",
|
|
121
|
+
"multi-step",
|
|
122
|
+
"compensation",
|
|
123
|
+
"human-in-the-loop"
|
|
109
124
|
],
|
|
110
125
|
"author": "egeominotti",
|
|
111
126
|
"license": "MIT",
|