bunqueue 2.4.0 → 2.4.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/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +1 -37
- package/dist/application/queueManager.js.map +1 -1
- package/dist/application/statsManager.d.ts +10 -0
- package/dist/application/statsManager.d.ts.map +1 -1
- package/dist/application/statsManager.js +42 -0
- package/dist/application/statsManager.js.map +1 -1
- package/dist/client/jobConversion.d.ts +3 -76
- package/dist/client/jobConversion.d.ts.map +1 -1
- package/dist/client/jobConversion.js +2 -100
- package/dist/client/jobConversion.js.map +1 -1
- package/dist/client/jobConversionHelpers.d.ts +13 -0
- package/dist/client/jobConversionHelpers.d.ts.map +1 -0
- package/dist/client/jobConversionHelpers.js +105 -0
- package/dist/client/jobConversionHelpers.js.map +1 -0
- package/dist/client/jobConversionTypes.d.ts +81 -0
- package/dist/client/jobConversionTypes.d.ts.map +1 -0
- package/dist/client/jobConversionTypes.js +6 -0
- package/dist/client/jobConversionTypes.js.map +1 -0
- package/dist/client/worker/worker.d.ts +4 -95
- package/dist/client/worker/worker.d.ts.map +1 -1
- package/dist/client/worker/worker.js +50 -282
- package/dist/client/worker/worker.js.map +1 -1
- package/dist/client/worker/workerHeartbeat.d.ts +16 -0
- package/dist/client/worker/workerHeartbeat.d.ts.map +1 -0
- package/dist/client/worker/workerHeartbeat.js +44 -0
- package/dist/client/worker/workerHeartbeat.js.map +1 -0
- package/dist/client/worker/workerPull.d.ts +21 -0
- package/dist/client/worker/workerPull.d.ts.map +1 -0
- package/dist/client/worker/workerPull.js +60 -0
- package/dist/client/worker/workerPull.js.map +1 -0
- package/dist/client/worker/workerRateLimiter.d.ts +37 -0
- package/dist/client/worker/workerRateLimiter.d.ts.map +1 -0
- package/dist/client/worker/workerRateLimiter.js +84 -0
- package/dist/client/worker/workerRateLimiter.js.map +1 -0
- package/dist/domain/queue/shard.d.ts +8 -23
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +30 -90
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/domain/queue/shardCounters.d.ts +36 -0
- package/dist/domain/queue/shardCounters.d.ts.map +1 -0
- package/dist/domain/queue/shardCounters.js +68 -0
- package/dist/domain/queue/shardCounters.js.map +1 -0
- package/dist/domain/queue/waiterManager.d.ts +19 -0
- package/dist/domain/queue/waiterManager.d.ts.map +1 -0
- package/dist/domain/queue/waiterManager.js +64 -0
- package/dist/domain/queue/waiterManager.js.map +1 -0
- package/dist/shared/boundedMap.d.ts +31 -0
- package/dist/shared/boundedMap.d.ts.map +1 -0
- package/dist/shared/boundedMap.js +78 -0
- package/dist/shared/boundedMap.js.map +1 -0
- package/dist/shared/boundedSet.d.ts +27 -0
- package/dist/shared/boundedSet.d.ts.map +1 -0
- package/dist/shared/boundedSet.js +64 -0
- package/dist/shared/boundedSet.js.map +1 -0
- package/dist/shared/lru.d.ts +5 -197
- package/dist/shared/lru.d.ts.map +1 -1
- package/dist/shared/lru.js +5 -538
- package/dist/shared/lru.js.map +1 -1
- package/dist/shared/lruMap.d.ts +43 -0
- package/dist/shared/lruMap.d.ts.map +1 -0
- package/dist/shared/lruMap.js +142 -0
- package/dist/shared/lruMap.js.map +1 -0
- package/dist/shared/lruSet.d.ts +37 -0
- package/dist/shared/lruSet.d.ts.map +1 -0
- package/dist/shared/lruSet.js +106 -0
- package/dist/shared/lruSet.js.map +1 -0
- package/dist/shared/ttlMap.d.ts +82 -0
- package/dist/shared/ttlMap.d.ts.map +1 -0
- package/dist/shared/ttlMap.js +169 -0
- package/dist/shared/ttlMap.js.map +1 -0
- package/package.json +1 -1
package/dist/shared/lru.d.ts
CHANGED
|
@@ -2,201 +2,9 @@
|
|
|
2
2
|
* LRU (Least Recently Used) Cache implementations
|
|
3
3
|
* Bounded collections with automatic eviction
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
delete(key: K): boolean;
|
|
11
|
-
clear(): void;
|
|
12
|
-
readonly size: number;
|
|
13
|
-
}
|
|
14
|
-
/** Set-like interface for LRU compatibility */
|
|
15
|
-
export interface SetLike<T> {
|
|
16
|
-
add(value: T): void;
|
|
17
|
-
has(value: T): boolean;
|
|
18
|
-
delete(value: T): boolean;
|
|
19
|
-
clear(): void;
|
|
20
|
-
readonly size: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* LRU Map - automatically evicts least recently used entries
|
|
24
|
-
* Optimized with doubly-linked list for O(1) move-to-front
|
|
25
|
-
* without delete+re-insert overhead
|
|
26
|
-
*/
|
|
27
|
-
export declare class LRUMap<K, V> implements MapLike<K, V> {
|
|
28
|
-
private readonly cache;
|
|
29
|
-
private readonly maxSize;
|
|
30
|
-
private readonly onEvict?;
|
|
31
|
-
private head;
|
|
32
|
-
private tail;
|
|
33
|
-
constructor(maxSize: number, onEvict?: (key: K, value: V) => void);
|
|
34
|
-
/** Move node to front (most recently used) - O(1) */
|
|
35
|
-
private moveToFront;
|
|
36
|
-
/** Remove node from list - O(1) */
|
|
37
|
-
private removeNode;
|
|
38
|
-
/** Add node to front - O(1) */
|
|
39
|
-
private addToFront;
|
|
40
|
-
get(key: K): V | undefined;
|
|
41
|
-
set(key: K, value: V): void;
|
|
42
|
-
has(key: K): boolean;
|
|
43
|
-
delete(key: K): boolean;
|
|
44
|
-
clear(): void;
|
|
45
|
-
get size(): number;
|
|
46
|
-
keys(): IterableIterator<K>;
|
|
47
|
-
values(): IterableIterator<V>;
|
|
48
|
-
entries(): IterableIterator<[K, V]>;
|
|
49
|
-
forEach(callback: (value: V, key: K) => void): void;
|
|
50
|
-
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* LRU Set - automatically evicts least recently used entries
|
|
54
|
-
* Optimized with doubly-linked list for O(1) move-to-front
|
|
55
|
-
*/
|
|
56
|
-
export declare class LRUSet<T> implements SetLike<T> {
|
|
57
|
-
private readonly cache;
|
|
58
|
-
private readonly maxSize;
|
|
59
|
-
private readonly onEvict?;
|
|
60
|
-
private head;
|
|
61
|
-
private tail;
|
|
62
|
-
constructor(maxSize: number, onEvict?: (value: T) => void);
|
|
63
|
-
/** Move node to front - O(1) */
|
|
64
|
-
private moveToFront;
|
|
65
|
-
/** Remove node from list - O(1) */
|
|
66
|
-
private removeNode;
|
|
67
|
-
/** Add node to front - O(1) */
|
|
68
|
-
private addToFront;
|
|
69
|
-
add(value: T): void;
|
|
70
|
-
has(value: T): boolean;
|
|
71
|
-
delete(value: T): boolean;
|
|
72
|
-
clear(): void;
|
|
73
|
-
get size(): number;
|
|
74
|
-
values(): IterableIterator<T>;
|
|
75
|
-
[Symbol.iterator](): IterableIterator<T>;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Bounded Set - fast FIFO eviction without LRU tracking
|
|
79
|
-
* Optimized for high-throughput scenarios where recency doesn't matter
|
|
80
|
-
* Uses batch eviction to avoid per-item iterator overhead
|
|
81
|
-
*/
|
|
82
|
-
export declare class BoundedSet<T> implements SetLike<T> {
|
|
83
|
-
private readonly cache;
|
|
84
|
-
private readonly maxSize;
|
|
85
|
-
private readonly onEvict?;
|
|
86
|
-
/** Evict 10% of items at once to amortize iterator cost */
|
|
87
|
-
private readonly evictBatchSize;
|
|
88
|
-
constructor(maxSize: number, onEvict?: (value: T) => void);
|
|
89
|
-
add(value: T): void;
|
|
90
|
-
/** Evict multiple items at once - more efficient than one at a time */
|
|
91
|
-
private evictBatch;
|
|
92
|
-
has(value: T): boolean;
|
|
93
|
-
delete(value: T): boolean;
|
|
94
|
-
clear(): void;
|
|
95
|
-
get size(): number;
|
|
96
|
-
values(): IterableIterator<T>;
|
|
97
|
-
[Symbol.iterator](): IterableIterator<T>;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Bounded Map - fast FIFO eviction without LRU tracking
|
|
101
|
-
* Optimized for high-throughput scenarios where recency doesn't matter
|
|
102
|
-
* Uses batch eviction to avoid per-item iterator overhead
|
|
103
|
-
*/
|
|
104
|
-
export declare class BoundedMap<K, V> implements MapLike<K, V> {
|
|
105
|
-
private readonly cache;
|
|
106
|
-
private readonly maxSize;
|
|
107
|
-
private readonly onEvict?;
|
|
108
|
-
/** Evict 10% of items at once to amortize iterator cost */
|
|
109
|
-
private readonly evictBatchSize;
|
|
110
|
-
constructor(maxSize: number, onEvict?: (key: K, value: V) => void);
|
|
111
|
-
get(key: K): V | undefined;
|
|
112
|
-
set(key: K, value: V): void;
|
|
113
|
-
/** Evict multiple items at once - more efficient than one at a time */
|
|
114
|
-
private evictBatch;
|
|
115
|
-
has(key: K): boolean;
|
|
116
|
-
delete(key: K): boolean;
|
|
117
|
-
clear(): void;
|
|
118
|
-
get size(): number;
|
|
119
|
-
keys(): IterableIterator<K>;
|
|
120
|
-
values(): IterableIterator<V>;
|
|
121
|
-
entries(): IterableIterator<[K, V]>;
|
|
122
|
-
forEach(callback: (value: V, key: K) => void): void;
|
|
123
|
-
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* TTL Map - entries expire after timeout
|
|
127
|
-
* Optimized with MinHeap for O(log n) insert and O(k) cleanup
|
|
128
|
-
*
|
|
129
|
-
* IMPORTANT: You MUST call stop() when done with this instance to prevent memory leaks.
|
|
130
|
-
* The cleanup interval will keep running until stop() is called, preventing the instance
|
|
131
|
-
* from being garbage collected.
|
|
132
|
-
*
|
|
133
|
-
* @example
|
|
134
|
-
* ```typescript
|
|
135
|
-
* const map = new TTLMap<string, number>(60_000); // 60s TTL
|
|
136
|
-
* try {
|
|
137
|
-
* map.set('key', 123);
|
|
138
|
-
* // use map...
|
|
139
|
-
* } finally {
|
|
140
|
-
* map.stop(); // REQUIRED: stops cleanup interval
|
|
141
|
-
* }
|
|
142
|
-
* ```
|
|
143
|
-
*
|
|
144
|
-
* Memory leak prevention:
|
|
145
|
-
* - Each heap entry stores (expiresAt, key)
|
|
146
|
-
* - During cleanup, we verify the key still exists in cache AND has matching expiresAt
|
|
147
|
-
* - Stale entries (deleted keys or updated TTLs) are skipped and removed from heap
|
|
148
|
-
* - Periodic compaction rebuilds heap when stale ratio exceeds threshold
|
|
149
|
-
*/
|
|
150
|
-
export declare class TTLMap<K, V> {
|
|
151
|
-
private readonly cache;
|
|
152
|
-
private readonly ttlMs;
|
|
153
|
-
private cleanupInterval;
|
|
154
|
-
/**
|
|
155
|
-
* Expiry heap: MinHeap of (expiresAt, key) for efficient cleanup
|
|
156
|
-
* O(log n) insert instead of O(n) with array splice
|
|
157
|
-
*/
|
|
158
|
-
private readonly expiryHeap;
|
|
159
|
-
/** Count of stale entries in heap (deleted or updated keys) */
|
|
160
|
-
private staleCount;
|
|
161
|
-
/** Rebuild heap when stale entries exceed this ratio of heap size */
|
|
162
|
-
private static readonly COMPACTION_THRESHOLD;
|
|
163
|
-
/** Minimum heap size before considering compaction (avoid frequent rebuilds for small heaps) */
|
|
164
|
-
private static readonly MIN_COMPACTION_SIZE;
|
|
165
|
-
/**
|
|
166
|
-
* Create a new TTLMap instance.
|
|
167
|
-
*
|
|
168
|
-
* @param ttlMs - Default time-to-live for entries in milliseconds
|
|
169
|
-
* @param cleanupIntervalMs - Interval between cleanup runs (default: 60000ms / 1 minute).
|
|
170
|
-
* Lower values = more frequent cleanup but higher CPU usage.
|
|
171
|
-
* Set based on expected entry volume and TTL duration.
|
|
172
|
-
*/
|
|
173
|
-
constructor(ttlMs: number, cleanupIntervalMs?: number);
|
|
174
|
-
private startCleanup;
|
|
175
|
-
/** O(k log n) cleanup where k = expired entries */
|
|
176
|
-
private cleanup;
|
|
177
|
-
/**
|
|
178
|
-
* Rebuild heap if stale entry ratio exceeds threshold
|
|
179
|
-
* This prevents unbounded heap growth from delete() and set() updates
|
|
180
|
-
*/
|
|
181
|
-
private maybeCompact;
|
|
182
|
-
/** Rebuild heap with only valid entries - O(n log n) */
|
|
183
|
-
private rebuildHeap;
|
|
184
|
-
get(key: K): V | undefined;
|
|
185
|
-
/** O(log n) insert with MinHeap instead of O(n) with array splice */
|
|
186
|
-
set(key: K, value: V, ttlMs?: number): void;
|
|
187
|
-
has(key: K): boolean;
|
|
188
|
-
delete(key: K): boolean;
|
|
189
|
-
clear(): void;
|
|
190
|
-
/**
|
|
191
|
-
* Stop the cleanup interval. MUST be called when done with this instance
|
|
192
|
-
* to prevent memory leaks. The interval keeps a reference to the instance,
|
|
193
|
-
* preventing garbage collection until stop() is called.
|
|
194
|
-
*/
|
|
195
|
-
stop(): void;
|
|
196
|
-
get size(): number;
|
|
197
|
-
/** Get heap size (for debugging/monitoring) */
|
|
198
|
-
get heapSize(): number;
|
|
199
|
-
/** Get count of stale heap entries (for debugging/monitoring) */
|
|
200
|
-
get staleEntryCount(): number;
|
|
201
|
-
}
|
|
5
|
+
export { type MapLike, LRUMap } from './lruMap';
|
|
6
|
+
export { type SetLike, LRUSet } from './lruSet';
|
|
7
|
+
export { BoundedSet } from './boundedSet';
|
|
8
|
+
export { BoundedMap } from './boundedMap';
|
|
9
|
+
export { TTLMap } from './ttlMap';
|
|
202
10
|
//# sourceMappingURL=lru.d.ts.map
|
package/dist/shared/lru.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../src/shared/lru.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../src/shared/lru.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|