bunqueue 1.6.0 → 1.6.2
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 +1 -1
- package/dist/application/eventsManager.d.ts +2 -1
- package/dist/application/eventsManager.d.ts.map +1 -1
- package/dist/application/eventsManager.js +27 -27
- package/dist/application/eventsManager.js.map +1 -1
- package/dist/application/operations/pull.d.ts.map +1 -1
- package/dist/application/operations/pull.js +7 -5
- package/dist/application/operations/pull.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +7 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/queue.d.ts +19 -1
- package/dist/client/queue.d.ts.map +1 -1
- package/dist/client/queue.js +87 -1
- package/dist/client/queue.js.map +1 -1
- package/dist/client/types.d.ts +71 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js +22 -0
- package/dist/client/types.js.map +1 -1
- package/dist/client/worker.d.ts +5 -0
- package/dist/client/worker.d.ts.map +1 -1
- package/dist/client/worker.js +30 -0
- package/dist/client/worker.js.map +1 -1
- package/dist/domain/queue/priorityQueue.d.ts +7 -2
- package/dist/domain/queue/priorityQueue.d.ts.map +1 -1
- package/dist/domain/queue/priorityQueue.js +29 -16
- package/dist/domain/queue/priorityQueue.js.map +1 -1
- package/dist/domain/queue/shard.d.ts +2 -2
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +14 -15
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/infrastructure/persistence/sqlite.d.ts +3 -0
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +24 -9
- package/dist/infrastructure/persistence/sqlite.js.map +1 -1
- package/dist/infrastructure/server/tcp.d.ts.map +1 -1
- package/dist/infrastructure/server/tcp.js +20 -7
- package/dist/infrastructure/server/tcp.js.map +1 -1
- package/dist/main.js +4 -9
- package/dist/main.js.map +1 -1
- package/dist/shared/hash.d.ts +2 -1
- package/dist/shared/hash.d.ts.map +1 -1
- package/dist/shared/hash.js +3 -18
- package/dist/shared/hash.js.map +1 -1
- package/dist/shared/minHeap.d.ts +11 -2
- package/dist/shared/minHeap.d.ts.map +1 -1
- package/dist/shared/minHeap.js +29 -12
- package/dist/shared/minHeap.js.map +1 -1
- package/package.json +14 -8
|
@@ -3,10 +3,22 @@
|
|
|
3
3
|
* Handles TCP connections with JSON line protocol
|
|
4
4
|
*/
|
|
5
5
|
import { handleCommand } from './handler';
|
|
6
|
-
import { LineBuffer, parseCommand,
|
|
6
|
+
import { LineBuffer, parseCommand, createConnectionState } from './protocol';
|
|
7
7
|
import { uuid } from '../../shared/hash';
|
|
8
8
|
import { tcpLog } from '../../shared/logger';
|
|
9
9
|
import { getRateLimiter } from './rateLimiter';
|
|
10
|
+
/** Reusable TextDecoder - avoid allocation per message */
|
|
11
|
+
const textDecoder = new TextDecoder();
|
|
12
|
+
/** Pre-allocated newline buffer for efficient writes */
|
|
13
|
+
const NEWLINE = '\n';
|
|
14
|
+
/** Serialize response with newline - avoids string concat per message */
|
|
15
|
+
function serializeResponseLine(response) {
|
|
16
|
+
return JSON.stringify(response) + NEWLINE;
|
|
17
|
+
}
|
|
18
|
+
/** Error response with newline */
|
|
19
|
+
function errorResponseLine(message, reqId) {
|
|
20
|
+
return JSON.stringify({ ok: false, error: message, reqId }) + NEWLINE;
|
|
21
|
+
}
|
|
10
22
|
/**
|
|
11
23
|
* Create and start TCP server
|
|
12
24
|
*/
|
|
@@ -38,24 +50,24 @@ export function createTcpServer(queueManager, config) {
|
|
|
38
50
|
const rateLimiter = getRateLimiter();
|
|
39
51
|
// Check rate limit
|
|
40
52
|
if (!rateLimiter.isAllowed(state.clientId)) {
|
|
41
|
-
socket.write(
|
|
53
|
+
socket.write(errorResponseLine('Rate limit exceeded'));
|
|
42
54
|
return;
|
|
43
55
|
}
|
|
44
|
-
const text =
|
|
56
|
+
const text = textDecoder.decode(data);
|
|
45
57
|
const lines = buffer.addData(text);
|
|
46
58
|
for (const line of lines) {
|
|
47
59
|
const cmd = parseCommand(line);
|
|
48
60
|
if (!cmd) {
|
|
49
|
-
socket.write(
|
|
61
|
+
socket.write(errorResponseLine('Invalid command'));
|
|
50
62
|
continue;
|
|
51
63
|
}
|
|
52
64
|
try {
|
|
53
65
|
const response = await handleCommand(cmd, ctx);
|
|
54
|
-
socket.write(
|
|
66
|
+
socket.write(serializeResponseLine(response));
|
|
55
67
|
}
|
|
56
68
|
catch (err) {
|
|
57
69
|
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
58
|
-
socket.write(
|
|
70
|
+
socket.write(errorResponseLine(message, cmd.reqId));
|
|
59
71
|
}
|
|
60
72
|
}
|
|
61
73
|
},
|
|
@@ -83,8 +95,9 @@ export function createTcpServer(queueManager, config) {
|
|
|
83
95
|
},
|
|
84
96
|
/** Broadcast to all connections */
|
|
85
97
|
broadcast(message) {
|
|
98
|
+
const messageWithNewline = message + NEWLINE;
|
|
86
99
|
for (const socket of connections.values()) {
|
|
87
|
-
socket.write(
|
|
100
|
+
socket.write(messageWithNewline);
|
|
88
101
|
}
|
|
89
102
|
},
|
|
90
103
|
/** Stop the server */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/infrastructure/server/tcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/infrastructure/server/tcp.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -61,18 +61,13 @@ function printBanner(config) {
|
|
|
61
61
|
const dim = '\x1b[2m';
|
|
62
62
|
const reset = '\x1b[0m';
|
|
63
63
|
const bold = '\x1b[1m';
|
|
64
|
-
const
|
|
64
|
+
const magenta = '\x1b[35m';
|
|
65
65
|
const green = '\x1b[32m';
|
|
66
66
|
const yellow = '\x1b[33m';
|
|
67
67
|
console.log(`
|
|
68
|
-
${
|
|
69
|
-
${
|
|
70
|
-
${
|
|
71
|
-
${cyan} / /_/ / /_/ / / / / /_/ / /_/ / __/ /_/ / __/ ${reset}
|
|
72
|
-
${cyan}/_____/\\__,_/_/ /_/\\___\\_\\__,_/\\___/\\__,_/\\___/ ${reset}
|
|
73
|
-
${dim} v${VERSION}${reset}
|
|
74
|
-
|
|
75
|
-
${bold}High-performance job queue server written in TypeScript${reset}
|
|
68
|
+
${magenta} (\\(\\ ${reset}
|
|
69
|
+
${magenta} ( -.-) ${bold}bunqueue${reset} ${dim}v${VERSION}${reset}
|
|
70
|
+
${magenta} o_(")(") ${reset}${dim}High-performance job queue for Bun${reset}
|
|
76
71
|
|
|
77
72
|
${dim}─────────────────────────────────────────────────${reset}
|
|
78
73
|
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,kDAAkD;AAClD,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,aAAa;IACb,OAAO;IACP,SAAS;IACT,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,eAAe,GAAG,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,QAAQ,KAAK,OAAO,CAAC;AAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE/F,qDAAqD;AACrD,IAAI,eAAe,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;KAAM,CAAC;IACN,oEAAoE;IACpE,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAc1B,oDAAoD;AACpD,SAAS,UAAU;IACjB,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;QACjD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;QACnD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACvC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QACrE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAC1D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/E,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM;QAC1D,eAAe,EACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;KACpF,CAAC;AACJ,CAAC;AAED,2BAA2B;AAC3B,SAAS,WAAW,CAAC,MAAoB;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC;IACtB,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/hash.d.ts
CHANGED
|
@@ -19,7 +19,8 @@ export declare function shardIndex(key: string): number;
|
|
|
19
19
|
*/
|
|
20
20
|
export declare function processingShardIndex(jobId: string): number;
|
|
21
21
|
/**
|
|
22
|
-
* Generate a
|
|
22
|
+
* Generate a UUID v7 using Bun's native implementation
|
|
23
|
+
* ~10x faster than manual Math.random() based UUID v4
|
|
23
24
|
*/
|
|
24
25
|
export declare function uuid(): string;
|
|
25
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOzC;AAoBD;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAwB,CAAC;AACjD,eAAO,MAAM,UAAU,QAAkB,CAAC;AAE1C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOzC;AAoBD;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAwB,CAAC;AACjD,eAAO,MAAM,UAAU,QAAkB,CAAC;AAE1C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAO/D"}
|
package/dist/shared/hash.js
CHANGED
|
@@ -48,26 +48,11 @@ export function processingShardIndex(jobId) {
|
|
|
48
48
|
return fnv1a(jobId) & SHARD_MASK;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
* Generate a
|
|
51
|
+
* Generate a UUID v7 using Bun's native implementation
|
|
52
|
+
* ~10x faster than manual Math.random() based UUID v4
|
|
52
53
|
*/
|
|
53
54
|
export function uuid() {
|
|
54
|
-
|
|
55
|
-
let result = '';
|
|
56
|
-
for (let i = 0; i < 36; i++) {
|
|
57
|
-
if (i === 8 || i === 13 || i === 18 || i === 23) {
|
|
58
|
-
result += '-';
|
|
59
|
-
}
|
|
60
|
-
else if (i === 14) {
|
|
61
|
-
result += '4';
|
|
62
|
-
}
|
|
63
|
-
else if (i === 19) {
|
|
64
|
-
result += hex[(Math.random() * 4) | 8];
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
result += hex[(Math.random() * 16) | 0];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
55
|
+
return Bun.randomUUIDv7();
|
|
71
56
|
}
|
|
72
57
|
/**
|
|
73
58
|
* Constant-time string comparison
|
package/dist/shared/hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE1B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,6BAA6B;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,mCAAmC;IAErE,8CAA8C;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;AACnC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE1B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,6BAA6B;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,mCAAmC;IAErE,8CAA8C;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,KAAK,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/shared/minHeap.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generic Min-Heap implementation
|
|
3
|
-
*
|
|
2
|
+
* Generic Min-Heap implementation with 4-ary branching
|
|
3
|
+
* 4-ary heap provides better cache locality than binary heap:
|
|
4
|
+
* - Children are stored closer together in memory
|
|
5
|
+
* - Reduces cache misses during bubbleDown (most frequent operation)
|
|
6
|
+
* - 4 comparisons per level vs 2, but fewer levels to traverse
|
|
7
|
+
*
|
|
8
|
+
* O(log₄ n) push/pop, O(1) peek
|
|
4
9
|
*/
|
|
5
10
|
export declare class MinHeap<T> {
|
|
6
11
|
private heap;
|
|
7
12
|
private readonly compare;
|
|
13
|
+
/** Branching factor - 4 provides optimal cache performance on modern CPUs */
|
|
14
|
+
private static readonly D;
|
|
8
15
|
/**
|
|
9
16
|
* Create a min-heap with custom comparator
|
|
10
17
|
* @param compare Returns negative if a < b, positive if a > b, 0 if equal
|
|
@@ -28,7 +35,9 @@ export declare class MinHeap<T> {
|
|
|
28
35
|
buildFrom(items: T[]): void;
|
|
29
36
|
/** Remove item by predicate - O(n) */
|
|
30
37
|
removeWhere(predicate: (item: T) => boolean): T | undefined;
|
|
38
|
+
/** 4-ary bubbleUp: parent at floor((idx-1)/4) */
|
|
31
39
|
private bubbleUp;
|
|
40
|
+
/** 4-ary bubbleDown: children at D*idx+1 through D*idx+D */
|
|
32
41
|
private bubbleDown;
|
|
33
42
|
private swap;
|
|
34
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minHeap.d.ts","sourceRoot":"","sources":["../../src/shared/minHeap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"minHeap.d.ts","sourceRoot":"","sources":["../../src/shared/minHeap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qBAAa,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,6EAA6E;IAC7E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAK;IAE9B;;;OAGG;gBACS,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM;IAI3C,uBAAuB;IACvB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qBAAqB;IACrB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,2BAA2B;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAKnB,kCAAkC;IAClC,GAAG,IAAI,CAAC,GAAG,SAAS;IAapB,8CAA8C;IAC9C,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,qBAAqB;IACrB,KAAK,IAAI,IAAI;IAIb,oCAAoC;IACpC,OAAO,IAAI,CAAC,EAAE;IAId,qCAAqC;IACrC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAU3B,sCAAsC;IACtC,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,GAAG,SAAS;IAmB3D,iDAAiD;IACjD,OAAO,CAAC,QAAQ;IAUhB,4DAA4D;IAC5D,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,IAAI;CAKb"}
|
package/dist/shared/minHeap.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generic Min-Heap implementation
|
|
3
|
-
*
|
|
2
|
+
* Generic Min-Heap implementation with 4-ary branching
|
|
3
|
+
* 4-ary heap provides better cache locality than binary heap:
|
|
4
|
+
* - Children are stored closer together in memory
|
|
5
|
+
* - Reduces cache misses during bubbleDown (most frequent operation)
|
|
6
|
+
* - 4 comparisons per level vs 2, but fewer levels to traverse
|
|
7
|
+
*
|
|
8
|
+
* O(log₄ n) push/pop, O(1) peek
|
|
4
9
|
*/
|
|
5
10
|
export class MinHeap {
|
|
6
11
|
heap = [];
|
|
7
12
|
compare;
|
|
13
|
+
/** Branching factor - 4 provides optimal cache performance on modern CPUs */
|
|
14
|
+
static D = 4;
|
|
8
15
|
/**
|
|
9
16
|
* Create a min-heap with custom comparator
|
|
10
17
|
* @param compare Returns negative if a < b, positive if a > b, 0 if equal
|
|
@@ -54,8 +61,10 @@ export class MinHeap {
|
|
|
54
61
|
/** Rebuild heap from array - O(n) */
|
|
55
62
|
buildFrom(items) {
|
|
56
63
|
this.heap = [...items];
|
|
57
|
-
// Heapify from bottom up
|
|
58
|
-
|
|
64
|
+
// Heapify from bottom up - start from last non-leaf node
|
|
65
|
+
// In D-ary heap, last non-leaf is at floor((n-2)/D)
|
|
66
|
+
const D = MinHeap.D;
|
|
67
|
+
for (let i = Math.floor((this.heap.length - 2) / D); i >= 0; i--) {
|
|
59
68
|
this.bubbleDown(i);
|
|
60
69
|
}
|
|
61
70
|
}
|
|
@@ -79,27 +88,35 @@ export class MinHeap {
|
|
|
79
88
|
}
|
|
80
89
|
return item;
|
|
81
90
|
}
|
|
91
|
+
/** 4-ary bubbleUp: parent at floor((idx-1)/4) */
|
|
82
92
|
bubbleUp(idx) {
|
|
93
|
+
const D = MinHeap.D;
|
|
83
94
|
while (idx > 0) {
|
|
84
|
-
const parentIdx = Math.floor((idx - 1) /
|
|
95
|
+
const parentIdx = Math.floor((idx - 1) / D);
|
|
85
96
|
if (this.compare(this.heap[idx], this.heap[parentIdx]) >= 0)
|
|
86
97
|
break;
|
|
87
98
|
this.swap(idx, parentIdx);
|
|
88
99
|
idx = parentIdx;
|
|
89
100
|
}
|
|
90
101
|
}
|
|
102
|
+
/** 4-ary bubbleDown: children at D*idx+1 through D*idx+D */
|
|
91
103
|
bubbleDown(idx) {
|
|
104
|
+
const D = MinHeap.D;
|
|
92
105
|
const length = this.heap.length;
|
|
106
|
+
const heap = this.heap;
|
|
107
|
+
const compare = this.compare;
|
|
93
108
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
94
109
|
while (true) {
|
|
95
|
-
const
|
|
96
|
-
|
|
110
|
+
const firstChild = D * idx + 1;
|
|
111
|
+
if (firstChild >= length)
|
|
112
|
+
break;
|
|
113
|
+
// Find minimum among up to D children (cache-friendly sequential access)
|
|
97
114
|
let smallest = idx;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
115
|
+
const lastChild = Math.min(firstChild + D, length);
|
|
116
|
+
for (let c = firstChild; c < lastChild; c++) {
|
|
117
|
+
if (compare(heap[c], heap[smallest]) < 0) {
|
|
118
|
+
smallest = c;
|
|
119
|
+
}
|
|
103
120
|
}
|
|
104
121
|
if (smallest === idx)
|
|
105
122
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minHeap.js","sourceRoot":"","sources":["../../src/shared/minHeap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"minHeap.js","sourceRoot":"","sources":["../../src/shared/minHeap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunqueue",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"description": "High-performance job queue server written in Bun. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -39,7 +39,11 @@
|
|
|
39
39
|
"build": "bun build --compile --minify src/main.ts --outfile dist/bunqueue",
|
|
40
40
|
"build:lib": "tsc -p tsconfig.build.json",
|
|
41
41
|
"test": "bun test",
|
|
42
|
-
"bench": "bun run
|
|
42
|
+
"bench": "bun run bench/throughput.ts && bun run bench/latency.ts",
|
|
43
|
+
"bench:throughput": "bun run bench/throughput.ts",
|
|
44
|
+
"bench:latency": "bun run bench/latency.ts",
|
|
45
|
+
"bench:internal": "bun run benchmarks/index.ts",
|
|
46
|
+
"bench:compare": "bun run bench/comparison/run.ts",
|
|
43
47
|
"lint": "eslint src/",
|
|
44
48
|
"lint:fix": "eslint src/ --fix",
|
|
45
49
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
@@ -49,17 +53,19 @@
|
|
|
49
53
|
"prepublishOnly": "bun run build:lib"
|
|
50
54
|
},
|
|
51
55
|
"dependencies": {
|
|
52
|
-
"
|
|
53
|
-
"
|
|
56
|
+
"@msgpack/msgpack": "^3.0.0",
|
|
57
|
+
"croner": "^9.0.0"
|
|
54
58
|
},
|
|
55
59
|
"devDependencies": {
|
|
56
|
-
"@types/bun": "latest",
|
|
57
|
-
"typescript": "^5.9.3",
|
|
58
60
|
"@eslint/js": "^9.39.2",
|
|
59
|
-
"
|
|
61
|
+
"@types/bun": "latest",
|
|
62
|
+
"bullmq": "^5.67.2",
|
|
60
63
|
"eslint": "^9.39.2",
|
|
61
64
|
"eslint-config-prettier": "^10.1.8",
|
|
62
|
-
"
|
|
65
|
+
"ioredis": "^5.9.2",
|
|
66
|
+
"prettier": "^3.8.1",
|
|
67
|
+
"typescript": "^5.9.3",
|
|
68
|
+
"typescript-eslint": "^8.54.0"
|
|
63
69
|
},
|
|
64
70
|
"peerDependencies": {
|
|
65
71
|
"bun": ">=1.0.0"
|