bunqueue 1.9.8 → 1.9.9
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/application/backgroundTasks.d.ts.map +1 -1
- package/dist/application/backgroundTasks.js +1 -7
- package/dist/application/backgroundTasks.js.map +1 -1
- package/dist/application/cleanupTasks.js +4 -0
- package/dist/application/cleanupTasks.js.map +1 -1
- package/dist/application/clientTracking.js +2 -6
- package/dist/application/clientTracking.js.map +1 -1
- package/dist/application/contextFactory.d.ts.map +1 -1
- package/dist/application/contextFactory.js +1 -0
- package/dist/application/contextFactory.js.map +1 -1
- package/dist/application/lockManager.d.ts +1 -0
- package/dist/application/lockManager.d.ts.map +1 -1
- package/dist/application/lockManager.js +53 -35
- package/dist/application/lockManager.js.map +1 -1
- package/dist/application/operations/ack.d.ts +1 -0
- package/dist/application/operations/ack.d.ts.map +1 -1
- package/dist/application/operations/ack.js +13 -1
- package/dist/application/operations/ack.js.map +1 -1
- package/dist/application/operations/ackHelpers.d.ts +1 -0
- package/dist/application/operations/ackHelpers.d.ts.map +1 -1
- package/dist/application/operations/ackHelpers.js +12 -1
- package/dist/application/operations/ackHelpers.js.map +1 -1
- package/dist/application/operations/push.d.ts.map +1 -1
- package/dist/application/operations/push.js +12 -4
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +8 -1
- package/dist/application/queueManager.js.map +1 -1
- package/dist/application/stallDetection.js +2 -2
- package/dist/application/stallDetection.js.map +1 -1
- package/dist/application/types.js +1 -1
- package/dist/application/types.js.map +1 -1
- package/dist/cli/client.d.ts +3 -5
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +31 -27
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/commands/core.js +3 -3
- package/dist/cli/commands/core.js.map +1 -1
- package/dist/cli/commands/job.js +14 -14
- package/dist/cli/commands/job.js.map +1 -1
- package/dist/cli/commands/server.d.ts.map +1 -1
- package/dist/cli/commands/server.js +5 -29
- package/dist/cli/commands/server.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/events.d.ts +0 -1
- package/dist/client/events.d.ts.map +1 -1
- package/dist/client/events.js +4 -7
- package/dist/client/events.js.map +1 -1
- package/dist/client/flow.d.ts +23 -1
- package/dist/client/flow.d.ts.map +1 -1
- package/dist/client/flow.js +166 -68
- package/dist/client/flow.js.map +1 -1
- package/dist/client/queue/queue.d.ts.map +1 -1
- package/dist/client/queue/queue.js +3 -1
- package/dist/client/queue/queue.js.map +1 -1
- package/dist/client/sandboxed/types.d.ts +1 -0
- package/dist/client/sandboxed/types.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.d.ts +1 -0
- package/dist/client/sandboxed/worker.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.js +31 -8
- package/dist/client/sandboxed/worker.js.map +1 -1
- package/dist/client/sandboxed/wrapper.d.ts.map +1 -1
- package/dist/client/sandboxed/wrapper.js +10 -1
- package/dist/client/sandboxed/wrapper.js.map +1 -1
- package/dist/client/tcp/client.d.ts +4 -1
- package/dist/client/tcp/client.d.ts.map +1 -1
- package/dist/client/tcp/client.js +26 -8
- package/dist/client/tcp/client.js.map +1 -1
- package/dist/client/tcp/connection.d.ts +6 -8
- package/dist/client/tcp/connection.d.ts.map +1 -1
- package/dist/client/tcp/connection.js +24 -22
- package/dist/client/tcp/connection.js.map +1 -1
- package/dist/client/tcp/index.d.ts +0 -1
- package/dist/client/tcp/index.d.ts.map +1 -1
- package/dist/client/tcp/index.js +0 -1
- package/dist/client/tcp/index.js.map +1 -1
- package/dist/client/tcp/types.d.ts +8 -13
- package/dist/client/tcp/types.d.ts.map +1 -1
- package/dist/client/tcp/types.js +0 -1
- package/dist/client/tcp/types.js.map +1 -1
- package/dist/client/tcpPool.d.ts.map +1 -1
- package/dist/client/tcpPool.js +0 -6
- package/dist/client/tcpPool.js.map +1 -1
- package/dist/client/worker/ackBatcher.d.ts +1 -1
- package/dist/client/worker/ackBatcher.d.ts.map +1 -1
- package/dist/client/worker/ackBatcher.js +20 -18
- package/dist/client/worker/ackBatcher.js.map +1 -1
- package/dist/client/worker/jobParser.d.ts.map +1 -1
- package/dist/client/worker/jobParser.js +8 -7
- package/dist/client/worker/jobParser.js.map +1 -1
- package/dist/client/worker/processor.d.ts.map +1 -1
- package/dist/client/worker/processor.js +10 -6
- package/dist/client/worker/processor.js.map +1 -1
- package/dist/domain/queue/dlqShard.d.ts +2 -0
- package/dist/domain/queue/dlqShard.d.ts.map +1 -1
- package/dist/domain/queue/dlqShard.js +12 -2
- package/dist/domain/queue/dlqShard.js.map +1 -1
- package/dist/domain/queue/shard.d.ts +4 -2
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +6 -2
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/domain/queue/temporalManager.d.ts +1 -0
- package/dist/domain/queue/temporalManager.d.ts.map +1 -1
- package/dist/domain/queue/temporalManager.js +2 -1
- package/dist/domain/queue/temporalManager.js.map +1 -1
- package/dist/domain/queue/uniqueKeyManager.d.ts +2 -2
- package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -1
- package/dist/domain/queue/uniqueKeyManager.js +3 -3
- package/dist/domain/queue/uniqueKeyManager.js.map +1 -1
- package/dist/domain/types/command.d.ts +6 -0
- package/dist/domain/types/command.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.d.ts +2 -0
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +5 -1
- package/dist/infrastructure/persistence/sqlite.js.map +1 -1
- package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqliteBatch.js +4 -4
- package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -1
- package/dist/infrastructure/persistence/statements.d.ts +1 -1
- package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
- package/dist/infrastructure/persistence/statements.js +3 -2
- package/dist/infrastructure/persistence/statements.js.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
- package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.js +23 -3
- package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
- package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/core.js +26 -19
- package/dist/infrastructure/server/handlers/core.js.map +1 -1
- package/dist/infrastructure/server/http.d.ts.map +1 -1
- package/dist/infrastructure/server/http.js +27 -2
- package/dist/infrastructure/server/http.js.map +1 -1
- package/dist/infrastructure/server/protocol.d.ts +15 -1
- package/dist/infrastructure/server/protocol.d.ts.map +1 -1
- package/dist/infrastructure/server/protocol.js +37 -3
- package/dist/infrastructure/server/protocol.js.map +1 -1
- package/dist/infrastructure/server/tcp.d.ts +8 -10
- package/dist/infrastructure/server/tcp.d.ts.map +1 -1
- package/dist/infrastructure/server/tcp.js +51 -42
- package/dist/infrastructure/server/tcp.js.map +1 -1
- package/dist/main.js +2 -4
- package/dist/main.js.map +1 -1
- package/dist/shared/lru.d.ts +23 -0
- package/dist/shared/lru.d.ts.map +1 -1
- package/dist/shared/lru.js +61 -3
- package/dist/shared/lru.js.map +1 -1
- package/dist/shared/skipList.d.ts +10 -2
- package/dist/shared/skipList.d.ts.map +1 -1
- package/dist/shared/skipList.js +22 -1
- package/dist/shared/skipList.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/tcp/lineBuffer.d.ts +0 -17
- package/dist/client/tcp/lineBuffer.d.ts.map +0 -1
- package/dist/client/tcp/lineBuffer.js +0 -32
- package/dist/client/tcp/lineBuffer.js.map +0 -1
|
@@ -12,8 +12,6 @@ function parseServerArgs(args) {
|
|
|
12
12
|
options: {
|
|
13
13
|
'tcp-port': { type: 'string' },
|
|
14
14
|
'http-port': { type: 'string' },
|
|
15
|
-
'tcp-socket': { type: 'string' },
|
|
16
|
-
'http-socket': { type: 'string' },
|
|
17
15
|
host: { type: 'string' },
|
|
18
16
|
'data-path': { type: 'string' },
|
|
19
17
|
'auth-tokens': { type: 'string' },
|
|
@@ -24,8 +22,6 @@ function parseServerArgs(args) {
|
|
|
24
22
|
return {
|
|
25
23
|
tcpPort: parseInt(values['tcp-port'] ?? process.env.TCP_PORT ?? '6789', 10),
|
|
26
24
|
httpPort: parseInt(values['http-port'] ?? process.env.HTTP_PORT ?? '6790', 10),
|
|
27
|
-
tcpSocketPath: values['tcp-socket'] ?? process.env.TCP_SOCKET_PATH,
|
|
28
|
-
httpSocketPath: values['http-socket'] ?? process.env.HTTP_SOCKET_PATH,
|
|
29
25
|
host: values.host ?? process.env.HOST ?? '0.0.0.0',
|
|
30
26
|
dataPath: values['data-path'] ?? process.env.DATA_PATH,
|
|
31
27
|
authTokens: values['auth-tokens']?.split(',').filter(Boolean) ??
|
|
@@ -44,12 +40,6 @@ export async function runServer(args, showHelp) {
|
|
|
44
40
|
process.env.TCP_PORT = String(options.tcpPort);
|
|
45
41
|
process.env.HTTP_PORT = String(options.httpPort);
|
|
46
42
|
process.env.HOST = options.host;
|
|
47
|
-
if (options.tcpSocketPath) {
|
|
48
|
-
process.env.TCP_SOCKET_PATH = options.tcpSocketPath;
|
|
49
|
-
}
|
|
50
|
-
if (options.httpSocketPath) {
|
|
51
|
-
process.env.HTTP_SOCKET_PATH = options.httpSocketPath;
|
|
52
|
-
}
|
|
53
43
|
if (options.dataPath) {
|
|
54
44
|
process.env.DATA_PATH = options.dataPath;
|
|
55
45
|
}
|
|
@@ -66,24 +56,20 @@ export async function runServer(args, showHelp) {
|
|
|
66
56
|
dataPath: options.dataPath,
|
|
67
57
|
});
|
|
68
58
|
const authTokens = options.authTokens.length > 0 ? options.authTokens : undefined;
|
|
69
|
-
// Start
|
|
59
|
+
// Start TCP and HTTP servers
|
|
70
60
|
const tcpServer = createTcpServer(qm, {
|
|
71
|
-
socketPath: options.tcpSocketPath,
|
|
72
61
|
port: options.tcpPort,
|
|
73
62
|
hostname: options.host,
|
|
74
63
|
authTokens,
|
|
75
64
|
});
|
|
76
65
|
const httpServer = createHttpServer(qm, {
|
|
77
|
-
socketPath: options.httpSocketPath,
|
|
78
66
|
port: options.httpPort,
|
|
79
67
|
hostname: options.host,
|
|
80
68
|
authTokens,
|
|
81
69
|
});
|
|
82
70
|
serverLog.info('bunqueue server started', {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
httpSocket: options.httpSocketPath,
|
|
86
|
-
httpPort: options.httpSocketPath ? undefined : options.httpPort,
|
|
71
|
+
tcpPort: options.tcpPort,
|
|
72
|
+
httpPort: options.httpPort,
|
|
87
73
|
host: options.host,
|
|
88
74
|
dataPath: options.dataPath ?? 'in-memory',
|
|
89
75
|
auth: authTokens ? 'enabled' : 'disabled',
|
|
@@ -95,17 +81,8 @@ export async function runServer(args, showHelp) {
|
|
|
95
81
|
const green = '\x1b[32m';
|
|
96
82
|
const yellow = '\x1b[33m';
|
|
97
83
|
// Format endpoint display
|
|
98
|
-
const tcpDisplay = options.
|
|
99
|
-
|
|
100
|
-
: `${bold}${options.host}:${options.tcpPort}${reset}`;
|
|
101
|
-
const httpDisplay = options.httpSocketPath
|
|
102
|
-
? `${bold}${options.httpSocketPath}${reset} ${dim}(unix)${reset}`
|
|
103
|
-
: `${bold}${options.host}:${options.httpPort}${reset}`;
|
|
104
|
-
// Socket mode display
|
|
105
|
-
const hasUnixSockets = options.tcpSocketPath !== undefined || options.httpSocketPath !== undefined;
|
|
106
|
-
const socketDisplay = hasUnixSockets
|
|
107
|
-
? `${green}enabled${reset} ${dim}(${options.tcpSocketPath ? 'TCP' : ''}${options.tcpSocketPath && options.httpSocketPath ? '+' : ''}${options.httpSocketPath ? 'HTTP' : ''})${reset}`
|
|
108
|
-
: `${dim}disabled${reset}`;
|
|
84
|
+
const tcpDisplay = `${bold}${options.host}:${options.tcpPort}${reset}`;
|
|
85
|
+
const httpDisplay = `${bold}${options.host}:${options.httpPort}${reset}`;
|
|
109
86
|
console.log(`
|
|
110
87
|
${magenta} (\\(\\ ${reset}
|
|
111
88
|
${magenta} ( -.-) ${bold}bunqueue${reset} ${dim}v${VERSION}${reset}
|
|
@@ -115,7 +92,6 @@ ${dim}────────────────────────
|
|
|
115
92
|
|
|
116
93
|
${green}●${reset} TCP ${tcpDisplay}
|
|
117
94
|
${green}●${reset} HTTP ${httpDisplay}
|
|
118
|
-
${yellow}●${reset} Socket ${socketDisplay}
|
|
119
95
|
${yellow}●${reset} Data ${options.dataPath ?? 'in-memory'}
|
|
120
96
|
${yellow}●${reset} Auth ${authTokens ? `${green}enabled${reset}` : `${dim}disabled${reset}`}
|
|
121
97
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAmEH,qBAAqB;AACrB,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwE1C"}
|
package/dist/cli/index.js
CHANGED
|
@@ -14,7 +14,6 @@ function parseGlobalOptions() {
|
|
|
14
14
|
// Extract global options manually to preserve subcommand flags
|
|
15
15
|
let host = 'localhost';
|
|
16
16
|
let port = 6789;
|
|
17
|
-
let socketPath;
|
|
18
17
|
let token;
|
|
19
18
|
let json = false;
|
|
20
19
|
let help = false;
|
|
@@ -29,9 +28,6 @@ function parseGlobalOptions() {
|
|
|
29
28
|
else if (arg === '--port' || arg === '-p') {
|
|
30
29
|
port = parseInt(allArgs[++i] ?? '6789', 10);
|
|
31
30
|
}
|
|
32
|
-
else if (arg === '--socket' || arg === '-S') {
|
|
33
|
-
socketPath = allArgs[++i];
|
|
34
|
-
}
|
|
35
31
|
else if (arg === '--token' || arg === '-t') {
|
|
36
32
|
token = allArgs[++i];
|
|
37
33
|
}
|
|
@@ -50,9 +46,6 @@ function parseGlobalOptions() {
|
|
|
50
46
|
else if (arg.startsWith('--port=')) {
|
|
51
47
|
port = parseInt(arg.slice(7), 10);
|
|
52
48
|
}
|
|
53
|
-
else if (arg.startsWith('--socket=')) {
|
|
54
|
-
socketPath = arg.slice(9);
|
|
55
|
-
}
|
|
56
49
|
else if (arg.startsWith('--token=')) {
|
|
57
50
|
token = arg.slice(8);
|
|
58
51
|
}
|
|
@@ -63,7 +56,7 @@ function parseGlobalOptions() {
|
|
|
63
56
|
i++;
|
|
64
57
|
}
|
|
65
58
|
return {
|
|
66
|
-
options: { host, port,
|
|
59
|
+
options: { host, port, token, json, help, version },
|
|
67
60
|
commandArgs,
|
|
68
61
|
};
|
|
69
62
|
}
|
|
@@ -125,7 +118,6 @@ export async function main() {
|
|
|
125
118
|
await executeCommand(command, commandArgs.slice(1), {
|
|
126
119
|
host: options.host,
|
|
127
120
|
port: options.port,
|
|
128
|
-
socketPath: options.socketPath,
|
|
129
121
|
token: options.token,
|
|
130
122
|
json: options.json,
|
|
131
123
|
});
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client/events.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA6B;gBAEpC,IAAI,EAAE,MAAM;IAMxB,OAAO,CAAC,KAAK;IAmCb,+BAA+B;IAC/B,KAAK,IAAI,IAAI;CASd"}
|
package/dist/client/events.js
CHANGED
|
@@ -10,7 +10,6 @@ import { getSharedManager } from './manager';
|
|
|
10
10
|
export class QueueEvents extends EventEmitter {
|
|
11
11
|
name;
|
|
12
12
|
running = false;
|
|
13
|
-
pollTimer = null;
|
|
14
13
|
unsubscribe = null;
|
|
15
14
|
constructor(name) {
|
|
16
15
|
super();
|
|
@@ -18,7 +17,8 @@ export class QueueEvents extends EventEmitter {
|
|
|
18
17
|
this.start();
|
|
19
18
|
}
|
|
20
19
|
start() {
|
|
21
|
-
|
|
20
|
+
// Guard against double subscription (race condition prevention)
|
|
21
|
+
if (this.running || this.unsubscribe)
|
|
22
22
|
return;
|
|
23
23
|
this.running = true;
|
|
24
24
|
// Subscribe to events from QueueManager
|
|
@@ -52,15 +52,12 @@ export class QueueEvents extends EventEmitter {
|
|
|
52
52
|
/** Close the event listener */
|
|
53
53
|
close() {
|
|
54
54
|
this.running = false;
|
|
55
|
-
if (this.pollTimer) {
|
|
56
|
-
clearTimeout(this.pollTimer);
|
|
57
|
-
this.pollTimer = null;
|
|
58
|
-
}
|
|
59
55
|
if (this.unsubscribe) {
|
|
60
56
|
this.unsubscribe();
|
|
61
57
|
this.unsubscribe = null;
|
|
62
58
|
}
|
|
63
|
-
|
|
59
|
+
// Note: User-attached listeners are NOT removed here.
|
|
60
|
+
// Users should manage their own listeners via removeListener() or removeAllListeners().
|
|
64
61
|
}
|
|
65
62
|
}
|
|
66
63
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,IAAI,CAAS;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,IAAI,CAAS;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAAwB,IAAI,CAAC;IAEhD,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEO,KAAK;QACX,gEAAgE;QAChE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,wCAAwC;QACxC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxB;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,+BAA+B;IAC/B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,sDAAsD;QACtD,wFAAwF;IAC1F,CAAC;CACF"}
|
package/dist/client/flow.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FlowProducer - Job chaining and pipelines
|
|
3
3
|
*/
|
|
4
|
-
import type { JobOptions } from './types';
|
|
4
|
+
import type { JobOptions, ConnectionOptions } from './types';
|
|
5
|
+
/** FlowProducer options */
|
|
6
|
+
export interface FlowProducerOptions {
|
|
7
|
+
/** Use embedded mode (no server) */
|
|
8
|
+
embedded?: boolean;
|
|
9
|
+
/** TCP connection options */
|
|
10
|
+
connection?: ConnectionOptions;
|
|
11
|
+
}
|
|
5
12
|
/** Step definition in a flow */
|
|
6
13
|
export interface FlowStep<T = unknown> {
|
|
7
14
|
/** Job name */
|
|
@@ -45,6 +52,14 @@ export interface FlowResult {
|
|
|
45
52
|
* ```
|
|
46
53
|
*/
|
|
47
54
|
export declare class FlowProducer {
|
|
55
|
+
private readonly embedded;
|
|
56
|
+
private readonly tcp;
|
|
57
|
+
private readonly useSharedPool;
|
|
58
|
+
constructor(opts?: FlowProducerOptions);
|
|
59
|
+
/** Close the connection pool (only if using dedicated pool) */
|
|
60
|
+
close(): void;
|
|
61
|
+
/** Push a job via embedded manager or TCP */
|
|
62
|
+
private pushJob;
|
|
48
63
|
/**
|
|
49
64
|
* Add a chain of jobs where each depends on the previous.
|
|
50
65
|
* Jobs execute sequentially: step[0] → step[1] → step[2] → ...
|
|
@@ -71,13 +86,20 @@ export declare class FlowProducer {
|
|
|
71
86
|
*/
|
|
72
87
|
addTree(root: FlowStep): Promise<FlowResult>;
|
|
73
88
|
private addTreeNode;
|
|
89
|
+
/**
|
|
90
|
+
* Cleanup jobs that were created before a failure occurred.
|
|
91
|
+
* Cancels each job to prevent orphaned jobs in the queue.
|
|
92
|
+
*/
|
|
93
|
+
private cleanupJobs;
|
|
74
94
|
/**
|
|
75
95
|
* Get the result of a completed parent job.
|
|
76
96
|
* Call this from within a worker to access the previous step's result.
|
|
97
|
+
* Note: Only works in embedded mode.
|
|
77
98
|
*/
|
|
78
99
|
getParentResult(parentId: string): unknown;
|
|
79
100
|
/**
|
|
80
101
|
* Get results from multiple parent jobs (for merge scenarios).
|
|
102
|
+
* Note: Only works in embedded mode.
|
|
81
103
|
*/
|
|
82
104
|
getParentResults(parentIds: string[]): Map<string, unknown>;
|
|
83
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI7D,2BAA2B;AAC3B,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,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,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,IAAI,GAAE,mBAAwB;IAyB1C,+DAA+D;IAC/D,KAAK,IAAI,IAAI;IAQb,6CAA6C;YAC/B,OAAO;IA8CrB;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBtD;;;;;;;;;;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;IA+BtD;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;YAYpC,WAAW;IAoBzB;;;OAGG;YACW,WAAW;IA0BzB;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQ1C;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;CAgB5D"}
|
package/dist/client/flow.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* FlowProducer - Job chaining and pipelines
|
|
3
3
|
*/
|
|
4
4
|
import { getSharedManager } from './manager';
|
|
5
|
+
import { TcpConnectionPool, getSharedPool, releaseSharedPool } from './tcpPool';
|
|
5
6
|
import { jobId } from '../domain/types/job';
|
|
7
|
+
const FORCE_EMBEDDED = process.env.BUNQUEUE_EMBEDDED === '1';
|
|
6
8
|
/**
|
|
7
9
|
* FlowProducer creates job flows with automatic dependencies.
|
|
8
10
|
*
|
|
@@ -28,6 +30,82 @@ import { jobId } from '../domain/types/job';
|
|
|
28
30
|
* ```
|
|
29
31
|
*/
|
|
30
32
|
export class FlowProducer {
|
|
33
|
+
embedded;
|
|
34
|
+
tcp;
|
|
35
|
+
useSharedPool;
|
|
36
|
+
constructor(opts = {}) {
|
|
37
|
+
this.embedded = opts.embedded ?? FORCE_EMBEDDED;
|
|
38
|
+
if (this.embedded) {
|
|
39
|
+
this.tcp = null;
|
|
40
|
+
this.useSharedPool = false;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const connOpts = opts.connection ?? {};
|
|
44
|
+
const poolSize = connOpts.poolSize ?? 4;
|
|
45
|
+
if (poolSize === 4 && !connOpts.token) {
|
|
46
|
+
this.tcp = getSharedPool({ host: connOpts.host, port: connOpts.port, poolSize });
|
|
47
|
+
this.useSharedPool = true;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.tcp = new TcpConnectionPool({
|
|
51
|
+
host: connOpts.host ?? 'localhost',
|
|
52
|
+
port: connOpts.port ?? 6789,
|
|
53
|
+
token: connOpts.token,
|
|
54
|
+
poolSize,
|
|
55
|
+
});
|
|
56
|
+
this.useSharedPool = false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Close the connection pool (only if using dedicated pool) */
|
|
61
|
+
close() {
|
|
62
|
+
if (this.tcp && !this.useSharedPool) {
|
|
63
|
+
this.tcp.close();
|
|
64
|
+
}
|
|
65
|
+
else if (this.tcp && this.useSharedPool) {
|
|
66
|
+
releaseSharedPool(this.tcp);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Push a job via embedded manager or TCP */
|
|
70
|
+
async pushJob(queueName, data, opts = {}, dependsOn) {
|
|
71
|
+
if (this.embedded) {
|
|
72
|
+
const manager = getSharedManager();
|
|
73
|
+
const job = await manager.push(queueName, {
|
|
74
|
+
data,
|
|
75
|
+
priority: opts.priority,
|
|
76
|
+
delay: opts.delay,
|
|
77
|
+
maxAttempts: opts.attempts,
|
|
78
|
+
backoff: opts.backoff,
|
|
79
|
+
timeout: opts.timeout,
|
|
80
|
+
customId: opts.jobId,
|
|
81
|
+
removeOnComplete: opts.removeOnComplete,
|
|
82
|
+
removeOnFail: opts.removeOnFail,
|
|
83
|
+
dependsOn: dependsOn?.map((id) => jobId(id)),
|
|
84
|
+
});
|
|
85
|
+
return String(job.id);
|
|
86
|
+
}
|
|
87
|
+
// TCP mode - tcp is guaranteed to exist when not embedded
|
|
88
|
+
if (!this.tcp)
|
|
89
|
+
throw new Error('TCP connection not initialized');
|
|
90
|
+
const response = await this.tcp.send({
|
|
91
|
+
cmd: 'PUSH',
|
|
92
|
+
queue: queueName,
|
|
93
|
+
data,
|
|
94
|
+
priority: opts.priority,
|
|
95
|
+
delay: opts.delay,
|
|
96
|
+
maxAttempts: opts.attempts,
|
|
97
|
+
backoff: opts.backoff,
|
|
98
|
+
timeout: opts.timeout,
|
|
99
|
+
jobId: opts.jobId,
|
|
100
|
+
removeOnComplete: opts.removeOnComplete,
|
|
101
|
+
removeOnFail: opts.removeOnFail,
|
|
102
|
+
dependsOn,
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error(response.error ?? 'Failed to add job');
|
|
106
|
+
}
|
|
107
|
+
return response.id;
|
|
108
|
+
}
|
|
31
109
|
/**
|
|
32
110
|
* Add a chain of jobs where each depends on the previous.
|
|
33
111
|
* Jobs execute sequentially: step[0] → step[1] → step[2] → ...
|
|
@@ -36,27 +114,21 @@ export class FlowProducer {
|
|
|
36
114
|
if (steps.length === 0) {
|
|
37
115
|
return { jobIds: [] };
|
|
38
116
|
}
|
|
39
|
-
const manager = getSharedManager();
|
|
40
117
|
const jobIds = [];
|
|
41
118
|
let prevId = null;
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
data
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
};
|
|
56
|
-
const job = await manager.push(step.queueName, input);
|
|
57
|
-
const id = String(job.id);
|
|
58
|
-
jobIds.push(id);
|
|
59
|
-
prevId = id;
|
|
119
|
+
try {
|
|
120
|
+
for (const step of steps) {
|
|
121
|
+
const merged = step.opts ?? {};
|
|
122
|
+
const data = { name: step.name, __flowParentId: prevId, ...step.data };
|
|
123
|
+
const id = await this.pushJob(step.queueName, data, merged, prevId ? [prevId] : undefined);
|
|
124
|
+
jobIds.push(id);
|
|
125
|
+
prevId = id;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
// Cleanup already-created jobs on failure
|
|
130
|
+
await this.cleanupJobs(jobIds);
|
|
131
|
+
throw error;
|
|
60
132
|
}
|
|
61
133
|
return { jobIds };
|
|
62
134
|
}
|
|
@@ -72,42 +144,33 @@ export class FlowProducer {
|
|
|
72
144
|
* ```
|
|
73
145
|
*/
|
|
74
146
|
async addBulkThen(parallel, final) {
|
|
75
|
-
const manager = getSharedManager();
|
|
76
147
|
// Create parallel jobs (no dependencies)
|
|
77
148
|
const parallelIds = [];
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
data
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
};
|
|
149
|
+
try {
|
|
150
|
+
for (const step of parallel) {
|
|
151
|
+
const merged = step.opts ?? {};
|
|
152
|
+
const data = { name: step.name, ...step.data };
|
|
153
|
+
const id = await this.pushJob(step.queueName, data, merged);
|
|
154
|
+
parallelIds.push(id);
|
|
155
|
+
}
|
|
156
|
+
// Create final job with dependencies on all parallel jobs
|
|
157
|
+
const finalMerged = final.opts ?? {};
|
|
158
|
+
const finalData = {
|
|
159
|
+
name: final.name,
|
|
160
|
+
__flowParentIds: parallelIds,
|
|
161
|
+
...final.data,
|
|
162
|
+
};
|
|
163
|
+
const finalId = await this.pushJob(final.queueName, finalData, finalMerged, parallelIds);
|
|
164
|
+
return {
|
|
165
|
+
parallelIds,
|
|
166
|
+
finalId,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
// Cleanup already-created parallel jobs on failure
|
|
171
|
+
await this.cleanupJobs(parallelIds);
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
111
174
|
}
|
|
112
175
|
/**
|
|
113
176
|
* Add a tree of jobs where children depend on parent.
|
|
@@ -115,25 +178,20 @@ export class FlowProducer {
|
|
|
115
178
|
*/
|
|
116
179
|
async addTree(root) {
|
|
117
180
|
const jobIds = [];
|
|
118
|
-
|
|
181
|
+
try {
|
|
182
|
+
await this.addTreeNode(root, null, jobIds);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
// Cleanup already-created jobs on failure
|
|
186
|
+
await this.cleanupJobs(jobIds);
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
119
189
|
return { jobIds };
|
|
120
190
|
}
|
|
121
191
|
async addTreeNode(step, parentId, jobIds) {
|
|
122
|
-
const manager = getSharedManager();
|
|
123
192
|
const merged = step.opts ?? {};
|
|
124
|
-
const
|
|
125
|
-
|
|
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);
|
|
193
|
+
const data = { name: step.name, __flowParentId: parentId, ...step.data };
|
|
194
|
+
const id = await this.pushJob(step.queueName, data, merged, parentId ? [parentId] : undefined);
|
|
137
195
|
jobIds.push(id);
|
|
138
196
|
// Create children with this job as parent
|
|
139
197
|
if (step.children) {
|
|
@@ -143,18 +201,58 @@ export class FlowProducer {
|
|
|
143
201
|
}
|
|
144
202
|
return id;
|
|
145
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Cleanup jobs that were created before a failure occurred.
|
|
206
|
+
* Cancels each job to prevent orphaned jobs in the queue.
|
|
207
|
+
*/
|
|
208
|
+
async cleanupJobs(jobIds) {
|
|
209
|
+
if (jobIds.length === 0)
|
|
210
|
+
return;
|
|
211
|
+
if (this.embedded) {
|
|
212
|
+
const manager = getSharedManager();
|
|
213
|
+
const cleanupPromises = jobIds.map(async (id) => {
|
|
214
|
+
try {
|
|
215
|
+
await manager.cancel(jobId(id));
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Ignore errors during cleanup - job may already be processed or removed
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
await Promise.all(cleanupPromises);
|
|
222
|
+
}
|
|
223
|
+
else if (this.tcp) {
|
|
224
|
+
// TCP mode cleanup
|
|
225
|
+
const cleanupPromises = jobIds.map(async (id) => {
|
|
226
|
+
try {
|
|
227
|
+
await this.tcp?.send({ cmd: 'Cancel', id });
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Ignore errors during cleanup
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
await Promise.all(cleanupPromises);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
146
236
|
/**
|
|
147
237
|
* Get the result of a completed parent job.
|
|
148
238
|
* Call this from within a worker to access the previous step's result.
|
|
239
|
+
* Note: Only works in embedded mode.
|
|
149
240
|
*/
|
|
150
241
|
getParentResult(parentId) {
|
|
242
|
+
if (!this.embedded) {
|
|
243
|
+
throw new Error('getParentResult is only available in embedded mode');
|
|
244
|
+
}
|
|
151
245
|
const manager = getSharedManager();
|
|
152
246
|
return manager.getResult(jobId(parentId));
|
|
153
247
|
}
|
|
154
248
|
/**
|
|
155
249
|
* Get results from multiple parent jobs (for merge scenarios).
|
|
250
|
+
* Note: Only works in embedded mode.
|
|
156
251
|
*/
|
|
157
252
|
getParentResults(parentIds) {
|
|
253
|
+
if (!this.embedded) {
|
|
254
|
+
throw new Error('getParentResults is only available in embedded mode');
|
|
255
|
+
}
|
|
158
256
|
const manager = getSharedManager();
|
|
159
257
|
const results = new Map();
|
|
160
258
|
for (const id of parentIds) {
|
package/dist/client/flow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"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"}
|