bunqueue 1.3.2 → 1.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.
Files changed (62) hide show
  1. package/README.md +114 -0
  2. package/dist/application/dlqManager.js +2 -2
  3. package/dist/application/dlqManager.js.map +1 -1
  4. package/dist/application/operations/ack.d.ts +2 -0
  5. package/dist/application/operations/ack.d.ts.map +1 -1
  6. package/dist/application/operations/ack.js +8 -1
  7. package/dist/application/operations/ack.js.map +1 -1
  8. package/dist/application/operations/jobManagement.js +1 -1
  9. package/dist/application/operations/jobManagement.js.map +1 -1
  10. package/dist/application/operations/push.js +2 -2
  11. package/dist/application/operations/push.js.map +1 -1
  12. package/dist/application/queueManager.d.ts +2 -0
  13. package/dist/application/queueManager.d.ts.map +1 -1
  14. package/dist/application/queueManager.js +28 -1
  15. package/dist/application/queueManager.js.map +1 -1
  16. package/dist/cli/dashboard.d.ts +32 -0
  17. package/dist/cli/dashboard.d.ts.map +1 -0
  18. package/dist/cli/dashboard.js +183 -0
  19. package/dist/cli/dashboard.js.map +1 -0
  20. package/dist/client/flow.d.ts +84 -0
  21. package/dist/client/flow.d.ts.map +1 -0
  22. package/dist/client/flow.js +169 -0
  23. package/dist/client/flow.js.map +1 -0
  24. package/dist/client/index.d.ts +3 -0
  25. package/dist/client/index.d.ts.map +1 -1
  26. package/dist/client/index.js +2 -0
  27. package/dist/client/index.js.map +1 -1
  28. package/dist/client/queue.d.ts +1 -1
  29. package/dist/client/queue.d.ts.map +1 -1
  30. package/dist/client/queue.js +36 -6
  31. package/dist/client/queue.js.map +1 -1
  32. package/dist/client/queueGroup.d.ts +41 -0
  33. package/dist/client/queueGroup.d.ts.map +1 -0
  34. package/dist/client/queueGroup.js +81 -0
  35. package/dist/client/queueGroup.js.map +1 -0
  36. package/dist/client/types.d.ts +9 -0
  37. package/dist/client/types.d.ts.map +1 -1
  38. package/dist/client/types.js.map +1 -1
  39. package/dist/domain/queue/shard.d.ts +22 -6
  40. package/dist/domain/queue/shard.d.ts.map +1 -1
  41. package/dist/domain/queue/shard.js +61 -45
  42. package/dist/domain/queue/shard.js.map +1 -1
  43. package/dist/domain/types/job.d.ts +19 -0
  44. package/dist/domain/types/job.d.ts.map +1 -1
  45. package/dist/domain/types/job.js +8 -0
  46. package/dist/domain/types/job.js.map +1 -1
  47. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  48. package/dist/infrastructure/persistence/sqlite.js +1 -0
  49. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  50. package/dist/infrastructure/scheduler/cronScheduler.d.ts +8 -3
  51. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  52. package/dist/infrastructure/scheduler/cronScheduler.js +49 -26
  53. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  54. package/dist/shared/lru.d.ts +24 -4
  55. package/dist/shared/lru.d.ts.map +1 -1
  56. package/dist/shared/lru.js +187 -66
  57. package/dist/shared/lru.js.map +1 -1
  58. package/dist/shared/skipList.d.ts +95 -0
  59. package/dist/shared/skipList.d.ts.map +1 -0
  60. package/dist/shared/skipList.js +277 -0
  61. package/dist/shared/skipList.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Live Dashboard for bunqueue server
3
+ * Interactive terminal UI with real-time stats
4
+ */
5
+ import { VERSION } from '../shared/version';
6
+ // ANSI escape codes
7
+ const ESC = '\x1b';
8
+ const CLEAR = `${ESC}[2J${ESC}[H`;
9
+ const HIDE_CURSOR = `${ESC}[?25l`;
10
+ const SHOW_CURSOR = `${ESC}[?25h`;
11
+ const BOLD = `${ESC}[1m`;
12
+ const DIM = `${ESC}[2m`;
13
+ const RESET = `${ESC}[0m`;
14
+ const CYAN = `${ESC}[36m`;
15
+ const GREEN = `${ESC}[32m`;
16
+ const YELLOW = `${ESC}[33m`;
17
+ const RED = `${ESC}[31m`;
18
+ const WHITE = `${ESC}[37m`;
19
+ const BG_GRAY = `${ESC}[48;5;236m`;
20
+ const recentActivity = [];
21
+ const MAX_ACTIVITY = 8;
22
+ let lastTotalCompleted = 0n;
23
+ let lastTotalPushed = 0n;
24
+ let lastCheckTime = Date.now();
25
+ let throughputIn = 0;
26
+ let throughputOut = 0;
27
+ /**
28
+ * Add activity entry
29
+ */
30
+ export function addActivity(type, queue, jobId, duration) {
31
+ const now = new Date();
32
+ const time = now.toLocaleTimeString('en-US', { hour12: false });
33
+ recentActivity.unshift({ time, type, queue, jobId, duration });
34
+ if (recentActivity.length > MAX_ACTIVITY) {
35
+ recentActivity.pop();
36
+ }
37
+ }
38
+ /**
39
+ * Format uptime
40
+ */
41
+ function formatUptime(ms) {
42
+ const seconds = Math.floor(ms / 1000);
43
+ const minutes = Math.floor(seconds / 60);
44
+ const hours = Math.floor(minutes / 60);
45
+ const days = Math.floor(hours / 24);
46
+ if (days > 0)
47
+ return `${days}d ${hours % 24}h`;
48
+ if (hours > 0)
49
+ return `${hours}h ${minutes % 60}m`;
50
+ if (minutes > 0)
51
+ return `${minutes}m ${seconds % 60}s`;
52
+ return `${seconds}s`;
53
+ }
54
+ /**
55
+ * Create progress bar
56
+ */
57
+ function progressBar(value, max, width = 20) {
58
+ if (max === 0)
59
+ return DIM + '░'.repeat(width) + RESET;
60
+ const filled = Math.round((value / max) * width);
61
+ const empty = width - filled;
62
+ return GREEN + '█'.repeat(filled) + DIM + '░'.repeat(empty) + RESET;
63
+ }
64
+ /**
65
+ * Format number with K/M suffix
66
+ */
67
+ function formatNum(n) {
68
+ const num = typeof n === 'bigint' ? Number(n) : n;
69
+ if (num >= 1_000_000)
70
+ return (num / 1_000_000).toFixed(1) + 'M';
71
+ if (num >= 1_000)
72
+ return (num / 1_000).toFixed(1) + 'K';
73
+ return String(num);
74
+ }
75
+ /**
76
+ * Render the dashboard
77
+ */
78
+ export function renderDashboard(ctx) {
79
+ const stats = ctx.queueManager.getStats();
80
+ const workerStats = ctx.queueManager.workerManager.getStats();
81
+ const queues = ctx.queueManager.listQueues();
82
+ // Calculate throughput
83
+ const now = Date.now();
84
+ const elapsed = (now - lastCheckTime) / 1000;
85
+ if (elapsed >= 1) {
86
+ throughputIn = Number(stats.totalPushed - lastTotalPushed) / elapsed;
87
+ throughputOut = Number(stats.totalCompleted - lastTotalCompleted) / elapsed;
88
+ lastTotalPushed = stats.totalPushed;
89
+ lastTotalCompleted = stats.totalCompleted;
90
+ lastCheckTime = now;
91
+ }
92
+ const total = stats.waiting + stats.active + Number(stats.totalCompleted) + stats.dlq;
93
+ const lines = [];
94
+ // Header
95
+ lines.push(`${BG_GRAY}${WHITE}${BOLD} bunqueue v${VERSION}${RESET}${BG_GRAY}${DIM}${' '.repeat(30)}uptime: ${formatUptime(stats.uptime)} ${RESET}`);
96
+ lines.push('');
97
+ // Stats boxes
98
+ const col1 = 28;
99
+ lines.push(`${BOLD} THROUGHPUT${RESET}${' '.repeat(col1 - 12)}${BOLD}JOBS${RESET}`);
100
+ lines.push(` ${GREEN}↑${RESET} ${throughputIn.toFixed(0).padStart(6)} jobs/sec${' '.repeat(col1 - 19)}waiting: ${formatNum(stats.waiting).padStart(7)} ${progressBar(stats.waiting, total, 15)}`);
101
+ lines.push(` ${CYAN}↓${RESET} ${throughputOut.toFixed(0).padStart(6)} jobs/sec${' '.repeat(col1 - 19)}active: ${formatNum(stats.active).padStart(7)} ${progressBar(stats.active, total, 15)}`);
102
+ lines.push(`${' '.repeat(col1)}completed: ${formatNum(stats.totalCompleted).padStart(7)} ${progressBar(Number(stats.totalCompleted), total, 15)}`);
103
+ lines.push(` ${BOLD}CONNECTIONS${RESET}${' '.repeat(col1 - 12)}failed: ${formatNum(stats.totalFailed).padStart(7)} ${RED}${stats.totalFailed > 0n ? '!' : ' '}${RESET}`);
104
+ lines.push(` TCP: ${ctx.tcpConnections().toString().padStart(3)} WS: ${ctx.wsClients().toString().padStart(3)} SSE: ${ctx.sseClients().toString().padStart(3)}${' '.repeat(3)}dlq: ${formatNum(stats.dlq).padStart(7)} ${stats.dlq > 0 ? RED + '!' + RESET : ' '}`);
105
+ lines.push('');
106
+ // Queues table
107
+ lines.push(`${DIM}${'─'.repeat(68)}${RESET}`);
108
+ lines.push(`${BOLD} QUEUE${' '.repeat(24)}COUNT WORKERS STATUS${RESET}`);
109
+ lines.push(`${DIM}${'─'.repeat(68)}${RESET}`);
110
+ if (queues.length === 0) {
111
+ lines.push(`${DIM} (no queues)${RESET}`);
112
+ }
113
+ else {
114
+ const displayQueues = queues.slice(0, 8);
115
+ for (const queueName of displayQueues) {
116
+ const count = ctx.queueManager.count(queueName);
117
+ const isPaused = ctx.queueManager.isPaused(queueName);
118
+ const status = isPaused
119
+ ? `${YELLOW}⏸ paused${RESET}`
120
+ : `${GREEN}● running${RESET}`;
121
+ const name = queueName.length > 28 ? queueName.slice(0, 25) + '...' : queueName;
122
+ lines.push(` ${name.padEnd(30)} ${count.toString().padStart(6)} ${workerStats.active.toString().padStart(3)} ${status}`);
123
+ }
124
+ if (queues.length > 8) {
125
+ lines.push(`${DIM} ... and ${queues.length - 8} more queues${RESET}`);
126
+ }
127
+ }
128
+ lines.push('');
129
+ lines.push(`${DIM}${'─'.repeat(68)}${RESET}`);
130
+ lines.push(`${BOLD} RECENT ACTIVITY${RESET}`);
131
+ lines.push(`${DIM}${'─'.repeat(68)}${RESET}`);
132
+ if (recentActivity.length === 0) {
133
+ lines.push(`${DIM} (no recent activity)${RESET}`);
134
+ }
135
+ else {
136
+ for (const act of recentActivity.slice(0, 6)) {
137
+ let icon;
138
+ let color;
139
+ switch (act.type) {
140
+ case 'completed':
141
+ icon = '✓';
142
+ color = GREEN;
143
+ break;
144
+ case 'failed':
145
+ icon = '✗';
146
+ color = RED;
147
+ break;
148
+ case 'started':
149
+ icon = '→';
150
+ color = CYAN;
151
+ break;
152
+ case 'pushed':
153
+ icon = '+';
154
+ color = YELLOW;
155
+ break;
156
+ }
157
+ const duration = act.duration ? ` (${act.duration}ms)` : '';
158
+ const shortQueue = act.queue.length > 20 ? act.queue.slice(0, 17) + '...' : act.queue;
159
+ lines.push(` ${DIM}${act.time}${RESET} ${color}${icon}${RESET} ${shortQueue}/${act.jobId.slice(0, 8)}${DIM}${duration}${RESET}`);
160
+ }
161
+ }
162
+ lines.push('');
163
+ lines.push(`${DIM}${'─'.repeat(68)}${RESET}`);
164
+ lines.push(` ${DIM}Press${RESET} ${BOLD}d${RESET}${DIM} banner${RESET} ${BOLD}p${RESET}${DIM} pause all${RESET} ${BOLD}r${RESET}${DIM} resume all${RESET} ${BOLD}q${RESET}${DIM} quit${RESET}`);
165
+ return CLEAR + lines.join('\n');
166
+ }
167
+ /**
168
+ * Start dashboard mode
169
+ */
170
+ export function startDashboard(ctx) {
171
+ process.stdout.write(HIDE_CURSOR);
172
+ const interval = setInterval(() => {
173
+ process.stdout.write(renderDashboard(ctx));
174
+ }, 500);
175
+ // Initial render
176
+ process.stdout.write(renderDashboard(ctx));
177
+ return () => {
178
+ clearInterval(interval);
179
+ process.stdout.write(SHOW_CURSOR);
180
+ process.stdout.write(CLEAR);
181
+ };
182
+ }
183
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * FlowProducer - Job chaining and pipelines
3
+ */
4
+ import type { JobOptions } from './types';
5
+ /** Step definition in a flow */
6
+ export interface FlowStep<T = unknown> {
7
+ /** Job name */
8
+ name: string;
9
+ /** Queue name */
10
+ queueName: string;
11
+ /** Job data */
12
+ data: T;
13
+ /** Job options */
14
+ opts?: JobOptions;
15
+ /** Child steps (for tree structures) */
16
+ children?: FlowStep[];
17
+ }
18
+ /** Result of adding a flow */
19
+ export interface FlowResult {
20
+ /** Job IDs in order */
21
+ jobIds: string[];
22
+ }
23
+ /**
24
+ * FlowProducer creates job flows with automatic dependencies.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const flow = new FlowProducer();
29
+ *
30
+ * // Simple chain: A → B → C
31
+ * const { jobIds } = await flow.addChain([
32
+ * { name: 'fetch', queueName: 'pipeline', data: { url: '...' } },
33
+ * { name: 'process', queueName: 'pipeline', data: {} },
34
+ * { name: 'store', queueName: 'pipeline', data: {} },
35
+ * ]);
36
+ *
37
+ * // Parallel then merge
38
+ * const result = await flow.addBulkThen(
39
+ * [
40
+ * { name: 'task1', queueName: 'parallel', data: { id: 1 } },
41
+ * { name: 'task2', queueName: 'parallel', data: { id: 2 } },
42
+ * ],
43
+ * { name: 'merge', queueName: 'final', data: {} }
44
+ * );
45
+ * ```
46
+ */
47
+ export declare class FlowProducer {
48
+ /**
49
+ * Add a chain of jobs where each depends on the previous.
50
+ * Jobs execute sequentially: step[0] → step[1] → step[2] → ...
51
+ */
52
+ addChain(steps: FlowStep[]): Promise<FlowResult>;
53
+ /**
54
+ * Add parallel jobs that all converge to a final job.
55
+ * Parallel jobs run concurrently, final job runs after all complete.
56
+ *
57
+ * @example
58
+ * ```
59
+ * parallel[0] ──┐
60
+ * parallel[1] ──┼──→ final
61
+ * parallel[2] ──┘
62
+ * ```
63
+ */
64
+ addBulkThen(parallel: FlowStep[], final: FlowStep): Promise<{
65
+ parallelIds: string[];
66
+ finalId: string;
67
+ }>;
68
+ /**
69
+ * Add a tree of jobs where children depend on parent.
70
+ * Recursively creates nested dependencies.
71
+ */
72
+ addTree(root: FlowStep): Promise<FlowResult>;
73
+ private addTreeNode;
74
+ /**
75
+ * Get the result of a completed parent job.
76
+ * Call this from within a worker to access the previous step's result.
77
+ */
78
+ getParentResult(parentId: string): unknown;
79
+ /**
80
+ * Get results from multiple parent jobs (for merge scenarios).
81
+ */
82
+ getParentResults(parentIds: string[]): Map<string, unknown>;
83
+ }
84
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,gCAAgC;AAChC,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,IAAI,EAAE,CAAC,CAAC;IACR,kBAAkB;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAiCtD;;;;;;;;;;OAUG;IACG,WAAW,CACf,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CtD;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;YAMpC,WAAW;IAkCzB;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK1C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;CAa5D"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * FlowProducer - Job chaining and pipelines
3
+ */
4
+ import { getSharedManager } from './manager';
5
+ import { jobId } from '../domain/types/job';
6
+ /**
7
+ * FlowProducer creates job flows with automatic dependencies.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const flow = new FlowProducer();
12
+ *
13
+ * // Simple chain: A → B → C
14
+ * const { jobIds } = await flow.addChain([
15
+ * { name: 'fetch', queueName: 'pipeline', data: { url: '...' } },
16
+ * { name: 'process', queueName: 'pipeline', data: {} },
17
+ * { name: 'store', queueName: 'pipeline', data: {} },
18
+ * ]);
19
+ *
20
+ * // Parallel then merge
21
+ * const result = await flow.addBulkThen(
22
+ * [
23
+ * { name: 'task1', queueName: 'parallel', data: { id: 1 } },
24
+ * { name: 'task2', queueName: 'parallel', data: { id: 2 } },
25
+ * ],
26
+ * { name: 'merge', queueName: 'final', data: {} }
27
+ * );
28
+ * ```
29
+ */
30
+ export class FlowProducer {
31
+ /**
32
+ * Add a chain of jobs where each depends on the previous.
33
+ * Jobs execute sequentially: step[0] → step[1] → step[2] → ...
34
+ */
35
+ async addChain(steps) {
36
+ if (steps.length === 0) {
37
+ return { jobIds: [] };
38
+ }
39
+ const manager = getSharedManager();
40
+ const jobIds = [];
41
+ let prevId = null;
42
+ for (const step of steps) {
43
+ const merged = step.opts ?? {};
44
+ const input = {
45
+ data: { name: step.name, __flowParentId: prevId, ...step.data },
46
+ priority: merged.priority,
47
+ delay: merged.delay,
48
+ maxAttempts: merged.attempts,
49
+ backoff: merged.backoff,
50
+ timeout: merged.timeout,
51
+ customId: merged.jobId,
52
+ removeOnComplete: merged.removeOnComplete,
53
+ removeOnFail: merged.removeOnFail,
54
+ dependsOn: prevId ? [jobId(prevId)] : undefined,
55
+ };
56
+ const job = await manager.push(step.queueName, input);
57
+ const id = String(job.id);
58
+ jobIds.push(id);
59
+ prevId = id;
60
+ }
61
+ return { jobIds };
62
+ }
63
+ /**
64
+ * Add parallel jobs that all converge to a final job.
65
+ * Parallel jobs run concurrently, final job runs after all complete.
66
+ *
67
+ * @example
68
+ * ```
69
+ * parallel[0] ──┐
70
+ * parallel[1] ──┼──→ final
71
+ * parallel[2] ──┘
72
+ * ```
73
+ */
74
+ async addBulkThen(parallel, final) {
75
+ const manager = getSharedManager();
76
+ // Create parallel jobs (no dependencies)
77
+ const parallelIds = [];
78
+ for (const step of parallel) {
79
+ const merged = step.opts ?? {};
80
+ const job = await manager.push(step.queueName, {
81
+ data: { name: step.name, ...step.data },
82
+ priority: merged.priority,
83
+ delay: merged.delay,
84
+ maxAttempts: merged.attempts,
85
+ backoff: merged.backoff,
86
+ timeout: merged.timeout,
87
+ customId: merged.jobId,
88
+ removeOnComplete: merged.removeOnComplete,
89
+ removeOnFail: merged.removeOnFail,
90
+ });
91
+ parallelIds.push(String(job.id));
92
+ }
93
+ // Create final job with dependencies on all parallel jobs
94
+ const finalMerged = final.opts ?? {};
95
+ const finalJob = await manager.push(final.queueName, {
96
+ data: { name: final.name, __flowParentIds: parallelIds, ...final.data },
97
+ priority: finalMerged.priority,
98
+ delay: finalMerged.delay,
99
+ maxAttempts: finalMerged.attempts,
100
+ backoff: finalMerged.backoff,
101
+ timeout: finalMerged.timeout,
102
+ customId: finalMerged.jobId,
103
+ removeOnComplete: finalMerged.removeOnComplete,
104
+ removeOnFail: finalMerged.removeOnFail,
105
+ dependsOn: parallelIds.map((id) => jobId(id)),
106
+ });
107
+ return {
108
+ parallelIds,
109
+ finalId: String(finalJob.id),
110
+ };
111
+ }
112
+ /**
113
+ * Add a tree of jobs where children depend on parent.
114
+ * Recursively creates nested dependencies.
115
+ */
116
+ async addTree(root) {
117
+ const jobIds = [];
118
+ await this.addTreeNode(root, null, jobIds);
119
+ return { jobIds };
120
+ }
121
+ async addTreeNode(step, parentId, jobIds) {
122
+ const manager = getSharedManager();
123
+ const merged = step.opts ?? {};
124
+ const job = await manager.push(step.queueName, {
125
+ data: { name: step.name, __flowParentId: parentId, ...step.data },
126
+ priority: merged.priority,
127
+ delay: merged.delay,
128
+ maxAttempts: merged.attempts,
129
+ backoff: merged.backoff,
130
+ timeout: merged.timeout,
131
+ customId: merged.jobId,
132
+ removeOnComplete: merged.removeOnComplete,
133
+ removeOnFail: merged.removeOnFail,
134
+ dependsOn: parentId ? [jobId(parentId)] : undefined,
135
+ });
136
+ const id = String(job.id);
137
+ jobIds.push(id);
138
+ // Create children with this job as parent
139
+ if (step.children) {
140
+ for (const child of step.children) {
141
+ await this.addTreeNode(child, id, jobIds);
142
+ }
143
+ }
144
+ return id;
145
+ }
146
+ /**
147
+ * Get the result of a completed parent job.
148
+ * Call this from within a worker to access the previous step's result.
149
+ */
150
+ getParentResult(parentId) {
151
+ const manager = getSharedManager();
152
+ return manager.getResult(jobId(parentId));
153
+ }
154
+ /**
155
+ * Get results from multiple parent jobs (for merge scenarios).
156
+ */
157
+ getParentResults(parentIds) {
158
+ const manager = getSharedManager();
159
+ const results = new Map();
160
+ for (const id of parentIds) {
161
+ const result = manager.getResult(jobId(id));
162
+ if (result !== undefined) {
163
+ results.set(id, result);
164
+ }
165
+ }
166
+ return results;
167
+ }
168
+ }
169
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,9 @@
21
21
  export { Queue } from './queue';
22
22
  export { Worker } from './worker';
23
23
  export { QueueEvents } from './events';
24
+ export { QueueGroup } from './queueGroup';
25
+ export { FlowProducer } from './flow';
24
26
  export { shutdownManager } from './manager';
25
27
  export type { Job, JobOptions, QueueOptions, WorkerOptions, Processor } from './types';
28
+ export type { FlowStep, FlowResult } from './flow';
26
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACvF,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC"}
@@ -21,5 +21,7 @@
21
21
  export { Queue } from './queue';
22
22
  export { Worker } from './worker';
23
23
  export { QueueEvents } from './events';
24
+ export { QueueGroup } from './queueGroup';
25
+ export { FlowProducer } from './flow';
24
26
  export { shutdownManager } from './manager';
25
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
@@ -11,7 +11,7 @@ export declare class Queue<T = unknown> {
11
11
  constructor(name: string, opts?: QueueOptions);
12
12
  /** Add a job to the queue */
13
13
  add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
14
- /** Add multiple jobs */
14
+ /** Add multiple jobs (batch optimized) */
15
15
  addBulk(jobs: Array<{
16
16
  name: string;
17
17
  data: T;
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI7D;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAKjD,6BAA6B;IACvB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAmBxE,wBAAwB;IAClB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAQ3F,sBAAsB;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAQhD,yBAAyB;IACzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKxB,8BAA8B;IAC9B,YAAY,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAUtF,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAIb,uBAAuB;IACvB,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAIb,iEAAiE;IACjE,UAAU,IAAI,IAAI;IAIlB,sBAAsB;IAChB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI7D;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAKjD,6BAA6B;IACvB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAoBxE,0CAA0C;IACpC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAwC3F,sBAAsB;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAQhD,yBAAyB;IACzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKxB,8BAA8B;IAC9B,YAAY,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAUtF,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAIb,uBAAuB;IACvB,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAIb,iEAAiE;IACjE,UAAU,IAAI,IAAI;IAIlB,sBAAsB;IAChB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -28,16 +28,46 @@ export class Queue {
28
28
  customId: merged.jobId,
29
29
  removeOnComplete: merged.removeOnComplete,
30
30
  removeOnFail: merged.removeOnFail,
31
+ repeat: merged.repeat,
31
32
  });
32
33
  return toPublicJob(job, name);
33
34
  }
34
- /** Add multiple jobs */
35
+ /** Add multiple jobs (batch optimized) */
35
36
  async addBulk(jobs) {
36
- const results = [];
37
- for (const { name, data, opts } of jobs) {
38
- results.push(await this.add(name, data, opts));
39
- }
40
- return results;
37
+ if (jobs.length === 0)
38
+ return [];
39
+ const manager = getSharedManager();
40
+ const now = Date.now();
41
+ // Map to JobInput format
42
+ const inputs = jobs.map(({ name, data, opts }) => {
43
+ const merged = { ...this.opts.defaultJobOptions, ...opts };
44
+ return {
45
+ data: { name, ...data },
46
+ priority: merged.priority,
47
+ delay: merged.delay,
48
+ maxAttempts: merged.attempts,
49
+ backoff: merged.backoff,
50
+ timeout: merged.timeout,
51
+ customId: merged.jobId,
52
+ removeOnComplete: merged.removeOnComplete,
53
+ removeOnFail: merged.removeOnFail,
54
+ repeat: merged.repeat,
55
+ };
56
+ });
57
+ // Single batch push (optimized: single lock, batch INSERT)
58
+ const jobIds = await manager.pushBatch(this.name, inputs);
59
+ // Create public job objects
60
+ return jobIds.map((id, i) => ({
61
+ id: String(id),
62
+ name: jobs[i].name,
63
+ data: jobs[i].data,
64
+ queueName: this.name,
65
+ attemptsMade: 0,
66
+ timestamp: now,
67
+ progress: 0,
68
+ updateProgress: async () => { },
69
+ log: async () => { },
70
+ }));
41
71
  }
42
72
  /** Get a job by ID */
43
73
  async getJob(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * QueueGroup - Namespace isolation for queues
3
+ */
4
+ import { Queue } from './queue';
5
+ import { Worker } from './worker';
6
+ import type { QueueOptions, WorkerOptions, Processor } from './types';
7
+ /**
8
+ * QueueGroup provides namespace isolation for queues.
9
+ * All queues in a group share a common prefix.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const billing = new QueueGroup('billing');
14
+ *
15
+ * const invoices = billing.getQueue('invoices');
16
+ * const payments = billing.getQueue('payments');
17
+ *
18
+ * // Creates queues: "billing:invoices", "billing:payments"
19
+ *
20
+ * billing.pauseAll(); // Pauses all billing queues
21
+ * ```
22
+ */
23
+ export declare class QueueGroup {
24
+ readonly prefix: string;
25
+ constructor(namespace: string);
26
+ /** Get a queue within this group */
27
+ getQueue<T = unknown>(name: string, opts?: QueueOptions): Queue<T>;
28
+ /** Create a worker for a queue in this group */
29
+ getWorker<T = unknown, R = unknown>(name: string, processor: Processor<T, R>, opts?: WorkerOptions): Worker<T, R>;
30
+ /** List all queues in this group */
31
+ listQueues(): string[];
32
+ /** Pause all queues in this group */
33
+ pauseAll(): void;
34
+ /** Resume all queues in this group */
35
+ resumeAll(): void;
36
+ /** Drain all queues in this group (remove waiting jobs) */
37
+ drainAll(): void;
38
+ /** Obliterate all queues in this group (remove all data) */
39
+ obliterateAll(): void;
40
+ }
41
+ //# sourceMappingURL=queueGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueGroup.d.ts","sourceRoot":"","sources":["../../src/client/queueGroup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,SAAS,EAAE,MAAM;IAI7B,oCAAoC;IACpC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;IAIlE,gDAAgD;IAChD,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,aAAa,GACnB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAIf,oCAAoC;IACpC,UAAU,IAAI,MAAM,EAAE;IAQtB,qCAAqC;IACrC,QAAQ,IAAI,IAAI;IAShB,sCAAsC;IACtC,SAAS,IAAI,IAAI;IASjB,2DAA2D;IAC3D,QAAQ,IAAI,IAAI;IAShB,4DAA4D;IAC5D,aAAa,IAAI,IAAI;CAQtB"}