bunqueue 1.4.0 → 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.
- package/dist/application/dlqManager.js +2 -2
- package/dist/application/dlqManager.js.map +1 -1
- package/dist/application/operations/ack.js +1 -1
- package/dist/application/operations/ack.js.map +1 -1
- package/dist/application/operations/jobManagement.js +1 -1
- package/dist/application/operations/jobManagement.js.map +1 -1
- package/dist/application/operations/push.js +2 -2
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/queueManager.js +1 -1
- package/dist/application/queueManager.js.map +1 -1
- package/dist/cli/dashboard.d.ts +32 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +183 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/domain/queue/shard.d.ts +22 -6
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +61 -45
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.d.ts +8 -3
- package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.js +49 -26
- package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
- package/dist/shared/lru.d.ts +24 -4
- package/dist/shared/lru.d.ts.map +1 -1
- package/dist/shared/lru.js +187 -66
- package/dist/shared/lru.js.map +1 -1
- package/dist/shared/skipList.d.ts +95 -0
- package/dist/shared/skipList.d.ts.map +1 -0
- package/dist/shared/skipList.js +277 -0
- package/dist/shared/skipList.js.map +1 -0
- package/package.json +1 -1
package/dist/shared/lru.d.ts
CHANGED
|
@@ -21,12 +21,22 @@ export interface SetLike<T> {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
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
|
|
24
26
|
*/
|
|
25
27
|
export declare class LRUMap<K, V> implements MapLike<K, V> {
|
|
26
28
|
private readonly cache;
|
|
27
29
|
private readonly maxSize;
|
|
28
30
|
private readonly onEvict?;
|
|
31
|
+
private head;
|
|
32
|
+
private tail;
|
|
29
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;
|
|
30
40
|
get(key: K): V | undefined;
|
|
31
41
|
set(key: K, value: V): void;
|
|
32
42
|
has(key: K): boolean;
|
|
@@ -41,12 +51,21 @@ export declare class LRUMap<K, V> implements MapLike<K, V> {
|
|
|
41
51
|
}
|
|
42
52
|
/**
|
|
43
53
|
* LRU Set - automatically evicts least recently used entries
|
|
54
|
+
* Optimized with doubly-linked list for O(1) move-to-front
|
|
44
55
|
*/
|
|
45
56
|
export declare class LRUSet<T> implements SetLike<T> {
|
|
46
57
|
private readonly cache;
|
|
47
58
|
private readonly maxSize;
|
|
48
59
|
private readonly onEvict?;
|
|
60
|
+
private head;
|
|
61
|
+
private tail;
|
|
49
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;
|
|
50
69
|
add(value: T): void;
|
|
51
70
|
has(value: T): boolean;
|
|
52
71
|
delete(value: T): boolean;
|
|
@@ -105,22 +124,23 @@ export declare class BoundedMap<K, V> implements MapLike<K, V> {
|
|
|
105
124
|
}
|
|
106
125
|
/**
|
|
107
126
|
* TTL Map - entries expire after timeout
|
|
108
|
-
* Optimized with
|
|
127
|
+
* Optimized with MinHeap for O(log n) insert and O(k) cleanup
|
|
109
128
|
*/
|
|
110
129
|
export declare class TTLMap<K, V> {
|
|
111
130
|
private readonly cache;
|
|
112
131
|
private readonly ttlMs;
|
|
113
132
|
private cleanupInterval;
|
|
114
133
|
/**
|
|
115
|
-
* Expiry heap:
|
|
116
|
-
*
|
|
134
|
+
* Expiry heap: MinHeap of (expiresAt, key) for efficient cleanup
|
|
135
|
+
* O(log n) insert instead of O(n) with array splice
|
|
117
136
|
*/
|
|
118
137
|
private readonly expiryHeap;
|
|
119
138
|
constructor(ttlMs: number, cleanupIntervalMs?: number);
|
|
120
139
|
private startCleanup;
|
|
121
|
-
/** O(k) cleanup where k = expired entries
|
|
140
|
+
/** O(k log n) cleanup where k = expired entries */
|
|
122
141
|
private cleanup;
|
|
123
142
|
get(key: K): V | undefined;
|
|
143
|
+
/** O(log n) insert with MinHeap instead of O(n) with array splice */
|
|
124
144
|
set(key: K, value: V, ttlMs?: number): void;
|
|
125
145
|
has(key: K): boolean;
|
|
126
146
|
delete(key: K): boolean;
|
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":"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"}
|
package/dist/shared/lru.js
CHANGED
|
@@ -2,115 +2,245 @@
|
|
|
2
2
|
* LRU (Least Recently Used) Cache implementations
|
|
3
3
|
* Bounded collections with automatic eviction
|
|
4
4
|
*/
|
|
5
|
+
import { MinHeap } from './minHeap';
|
|
5
6
|
/**
|
|
6
7
|
* LRU Map - automatically evicts least recently used entries
|
|
8
|
+
* Optimized with doubly-linked list for O(1) move-to-front
|
|
9
|
+
* without delete+re-insert overhead
|
|
7
10
|
*/
|
|
8
11
|
export class LRUMap {
|
|
9
12
|
cache = new Map();
|
|
10
13
|
maxSize;
|
|
11
14
|
onEvict;
|
|
15
|
+
// Doubly-linked list head (most recent) and tail (least recent)
|
|
16
|
+
head = null;
|
|
17
|
+
tail = null;
|
|
12
18
|
constructor(maxSize, onEvict) {
|
|
13
19
|
this.maxSize = maxSize;
|
|
14
20
|
this.onEvict = onEvict;
|
|
15
21
|
}
|
|
22
|
+
/** Move node to front (most recently used) - O(1) */
|
|
23
|
+
moveToFront(node) {
|
|
24
|
+
if (node === this.head)
|
|
25
|
+
return; // Already at front
|
|
26
|
+
// Detach from current position
|
|
27
|
+
if (node.prev)
|
|
28
|
+
node.prev.next = node.next;
|
|
29
|
+
if (node.next)
|
|
30
|
+
node.next.prev = node.prev;
|
|
31
|
+
if (node === this.tail)
|
|
32
|
+
this.tail = node.prev;
|
|
33
|
+
// Move to front
|
|
34
|
+
node.prev = null;
|
|
35
|
+
node.next = this.head;
|
|
36
|
+
if (this.head)
|
|
37
|
+
this.head.prev = node;
|
|
38
|
+
this.head = node;
|
|
39
|
+
this.tail ??= node;
|
|
40
|
+
}
|
|
41
|
+
/** Remove node from list - O(1) */
|
|
42
|
+
removeNode(node) {
|
|
43
|
+
if (node.prev)
|
|
44
|
+
node.prev.next = node.next;
|
|
45
|
+
if (node.next)
|
|
46
|
+
node.next.prev = node.prev;
|
|
47
|
+
if (node === this.head)
|
|
48
|
+
this.head = node.next;
|
|
49
|
+
if (node === this.tail)
|
|
50
|
+
this.tail = node.prev;
|
|
51
|
+
}
|
|
52
|
+
/** Add node to front - O(1) */
|
|
53
|
+
addToFront(node) {
|
|
54
|
+
node.prev = null;
|
|
55
|
+
node.next = this.head;
|
|
56
|
+
if (this.head)
|
|
57
|
+
this.head.prev = node;
|
|
58
|
+
this.head = node;
|
|
59
|
+
this.tail ??= node;
|
|
60
|
+
}
|
|
16
61
|
get(key) {
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return value;
|
|
62
|
+
const node = this.cache.get(key);
|
|
63
|
+
if (!node)
|
|
64
|
+
return undefined;
|
|
65
|
+
// Move to front - O(1) without delete+re-insert
|
|
66
|
+
this.moveToFront(node);
|
|
67
|
+
return node.value;
|
|
24
68
|
}
|
|
25
69
|
set(key, value) {
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
|
|
70
|
+
const existing = this.cache.get(key);
|
|
71
|
+
if (existing) {
|
|
72
|
+
// Update value and move to front
|
|
73
|
+
existing.value = value;
|
|
74
|
+
this.moveToFront(existing);
|
|
29
75
|
}
|
|
30
|
-
else
|
|
31
|
-
// Evict
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
this.onEvict?.(firstKey, evictedValue);
|
|
38
|
-
}
|
|
76
|
+
else {
|
|
77
|
+
// Evict if at capacity
|
|
78
|
+
if (this.cache.size >= this.maxSize && this.tail) {
|
|
79
|
+
const evicted = this.tail;
|
|
80
|
+
this.cache.delete(evicted.key);
|
|
81
|
+
this.removeNode(evicted);
|
|
82
|
+
this.onEvict?.(evicted.key, evicted.value);
|
|
39
83
|
}
|
|
84
|
+
// Add new node
|
|
85
|
+
const node = { key, value, prev: null, next: null };
|
|
86
|
+
this.cache.set(key, node);
|
|
87
|
+
this.addToFront(node);
|
|
40
88
|
}
|
|
41
|
-
this.cache.set(key, value);
|
|
42
89
|
}
|
|
43
90
|
has(key) {
|
|
44
91
|
return this.cache.has(key);
|
|
45
92
|
}
|
|
46
93
|
delete(key) {
|
|
94
|
+
const node = this.cache.get(key);
|
|
95
|
+
if (!node)
|
|
96
|
+
return false;
|
|
97
|
+
this.removeNode(node);
|
|
47
98
|
return this.cache.delete(key);
|
|
48
99
|
}
|
|
49
100
|
clear() {
|
|
50
101
|
this.cache.clear();
|
|
102
|
+
this.head = null;
|
|
103
|
+
this.tail = null;
|
|
51
104
|
}
|
|
52
105
|
get size() {
|
|
53
106
|
return this.cache.size;
|
|
54
107
|
}
|
|
55
|
-
keys() {
|
|
56
|
-
|
|
108
|
+
*keys() {
|
|
109
|
+
// Iterate from tail (oldest) to head (newest) to match original Map behavior
|
|
110
|
+
let current = this.tail;
|
|
111
|
+
while (current) {
|
|
112
|
+
yield current.key;
|
|
113
|
+
current = current.prev;
|
|
114
|
+
}
|
|
57
115
|
}
|
|
58
|
-
values() {
|
|
59
|
-
|
|
116
|
+
*values() {
|
|
117
|
+
// Iterate from tail (oldest) to head (newest) to match original Map behavior
|
|
118
|
+
let current = this.tail;
|
|
119
|
+
while (current) {
|
|
120
|
+
yield current.value;
|
|
121
|
+
current = current.prev;
|
|
122
|
+
}
|
|
60
123
|
}
|
|
61
|
-
entries() {
|
|
62
|
-
|
|
124
|
+
*entries() {
|
|
125
|
+
// Iterate from tail (oldest) to head (newest) to match original Map behavior
|
|
126
|
+
let current = this.tail;
|
|
127
|
+
while (current) {
|
|
128
|
+
yield [current.key, current.value];
|
|
129
|
+
current = current.prev;
|
|
130
|
+
}
|
|
63
131
|
}
|
|
64
132
|
forEach(callback) {
|
|
65
|
-
|
|
133
|
+
// Iterate from tail (oldest) to head (newest) to match original Map behavior
|
|
134
|
+
let current = this.tail;
|
|
135
|
+
while (current) {
|
|
136
|
+
callback(current.value, current.key);
|
|
137
|
+
current = current.prev;
|
|
138
|
+
}
|
|
66
139
|
}
|
|
67
140
|
[Symbol.iterator]() {
|
|
68
|
-
return this.
|
|
141
|
+
return this.entries();
|
|
69
142
|
}
|
|
70
143
|
}
|
|
71
144
|
/**
|
|
72
145
|
* LRU Set - automatically evicts least recently used entries
|
|
146
|
+
* Optimized with doubly-linked list for O(1) move-to-front
|
|
73
147
|
*/
|
|
74
148
|
export class LRUSet {
|
|
75
|
-
cache = new
|
|
149
|
+
cache = new Map();
|
|
76
150
|
maxSize;
|
|
77
151
|
onEvict;
|
|
152
|
+
// Doubly-linked list head (most recent) and tail (least recent)
|
|
153
|
+
head = null;
|
|
154
|
+
tail = null;
|
|
78
155
|
constructor(maxSize, onEvict) {
|
|
79
156
|
this.maxSize = maxSize;
|
|
80
157
|
this.onEvict = onEvict;
|
|
81
158
|
}
|
|
159
|
+
/** Move node to front - O(1) */
|
|
160
|
+
moveToFront(node) {
|
|
161
|
+
if (node === this.head)
|
|
162
|
+
return;
|
|
163
|
+
if (node.prev)
|
|
164
|
+
node.prev.next = node.next;
|
|
165
|
+
if (node.next)
|
|
166
|
+
node.next.prev = node.prev;
|
|
167
|
+
if (node === this.tail)
|
|
168
|
+
this.tail = node.prev;
|
|
169
|
+
node.prev = null;
|
|
170
|
+
node.next = this.head;
|
|
171
|
+
if (this.head)
|
|
172
|
+
this.head.prev = node;
|
|
173
|
+
this.head = node;
|
|
174
|
+
this.tail ??= node;
|
|
175
|
+
}
|
|
176
|
+
/** Remove node from list - O(1) */
|
|
177
|
+
removeNode(node) {
|
|
178
|
+
if (node.prev)
|
|
179
|
+
node.prev.next = node.next;
|
|
180
|
+
if (node.next)
|
|
181
|
+
node.next.prev = node.prev;
|
|
182
|
+
if (node === this.head)
|
|
183
|
+
this.head = node.next;
|
|
184
|
+
if (node === this.tail)
|
|
185
|
+
this.tail = node.prev;
|
|
186
|
+
}
|
|
187
|
+
/** Add node to front - O(1) */
|
|
188
|
+
addToFront(node) {
|
|
189
|
+
node.prev = null;
|
|
190
|
+
node.next = this.head;
|
|
191
|
+
if (this.head)
|
|
192
|
+
this.head.prev = node;
|
|
193
|
+
this.head = node;
|
|
194
|
+
this.tail ??= node;
|
|
195
|
+
}
|
|
82
196
|
add(value) {
|
|
83
|
-
|
|
84
|
-
if (
|
|
85
|
-
|
|
197
|
+
const existing = this.cache.get(value);
|
|
198
|
+
if (existing) {
|
|
199
|
+
// Move to front
|
|
200
|
+
this.moveToFront(existing);
|
|
86
201
|
}
|
|
87
|
-
else
|
|
88
|
-
// Evict
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.cache.delete(
|
|
92
|
-
this.
|
|
202
|
+
else {
|
|
203
|
+
// Evict if at capacity
|
|
204
|
+
if (this.cache.size >= this.maxSize && this.tail) {
|
|
205
|
+
const evicted = this.tail;
|
|
206
|
+
this.cache.delete(evicted.value);
|
|
207
|
+
this.removeNode(evicted);
|
|
208
|
+
this.onEvict?.(evicted.value);
|
|
93
209
|
}
|
|
210
|
+
// Add new node
|
|
211
|
+
const node = { value, prev: null, next: null };
|
|
212
|
+
this.cache.set(value, node);
|
|
213
|
+
this.addToFront(node);
|
|
94
214
|
}
|
|
95
|
-
this.cache.add(value);
|
|
96
215
|
}
|
|
97
216
|
has(value) {
|
|
98
217
|
return this.cache.has(value);
|
|
99
218
|
}
|
|
100
219
|
delete(value) {
|
|
220
|
+
const node = this.cache.get(value);
|
|
221
|
+
if (!node)
|
|
222
|
+
return false;
|
|
223
|
+
this.removeNode(node);
|
|
101
224
|
return this.cache.delete(value);
|
|
102
225
|
}
|
|
103
226
|
clear() {
|
|
104
227
|
this.cache.clear();
|
|
228
|
+
this.head = null;
|
|
229
|
+
this.tail = null;
|
|
105
230
|
}
|
|
106
231
|
get size() {
|
|
107
232
|
return this.cache.size;
|
|
108
233
|
}
|
|
109
|
-
values() {
|
|
110
|
-
|
|
234
|
+
*values() {
|
|
235
|
+
// Iterate from tail (oldest) to head (newest) to match original Set behavior
|
|
236
|
+
let current = this.tail;
|
|
237
|
+
while (current) {
|
|
238
|
+
yield current.value;
|
|
239
|
+
current = current.prev;
|
|
240
|
+
}
|
|
111
241
|
}
|
|
112
242
|
[Symbol.iterator]() {
|
|
113
|
-
return this.
|
|
243
|
+
return this.values();
|
|
114
244
|
}
|
|
115
245
|
}
|
|
116
246
|
/**
|
|
@@ -249,17 +379,17 @@ export class BoundedMap {
|
|
|
249
379
|
}
|
|
250
380
|
/**
|
|
251
381
|
* TTL Map - entries expire after timeout
|
|
252
|
-
* Optimized with
|
|
382
|
+
* Optimized with MinHeap for O(log n) insert and O(k) cleanup
|
|
253
383
|
*/
|
|
254
384
|
export class TTLMap {
|
|
255
385
|
cache = new Map();
|
|
256
386
|
ttlMs;
|
|
257
387
|
cleanupInterval = null;
|
|
258
388
|
/**
|
|
259
|
-
* Expiry heap:
|
|
260
|
-
*
|
|
389
|
+
* Expiry heap: MinHeap of (expiresAt, key) for efficient cleanup
|
|
390
|
+
* O(log n) insert instead of O(n) with array splice
|
|
261
391
|
*/
|
|
262
|
-
expiryHeap =
|
|
392
|
+
expiryHeap = new MinHeap((a, b) => a.expiresAt - b.expiresAt);
|
|
263
393
|
constructor(ttlMs, cleanupIntervalMs = 60_000) {
|
|
264
394
|
this.ttlMs = ttlMs;
|
|
265
395
|
this.startCleanup(cleanupIntervalMs);
|
|
@@ -269,15 +399,16 @@ export class TTLMap {
|
|
|
269
399
|
this.cleanup();
|
|
270
400
|
}, intervalMs);
|
|
271
401
|
}
|
|
272
|
-
/** O(k) cleanup where k = expired entries
|
|
402
|
+
/** O(k log n) cleanup where k = expired entries */
|
|
273
403
|
cleanup() {
|
|
274
404
|
const now = Date.now();
|
|
275
|
-
// Remove expired entries from heap
|
|
276
|
-
while (this.expiryHeap.
|
|
277
|
-
const
|
|
278
|
-
if (!
|
|
405
|
+
// Remove expired entries from heap - O(k log n)
|
|
406
|
+
while (!this.expiryHeap.isEmpty) {
|
|
407
|
+
const top = this.expiryHeap.peek();
|
|
408
|
+
if (!top || top.expiresAt > now)
|
|
279
409
|
break;
|
|
280
|
-
|
|
410
|
+
this.expiryHeap.pop();
|
|
411
|
+
const { key, expiresAt } = top;
|
|
281
412
|
// Verify entry still exists and has same expiry (might have been updated)
|
|
282
413
|
const entry = this.cache.get(key);
|
|
283
414
|
if (entry?.expiresAt === expiresAt) {
|
|
@@ -295,22 +426,12 @@ export class TTLMap {
|
|
|
295
426
|
}
|
|
296
427
|
return entry.value;
|
|
297
428
|
}
|
|
429
|
+
/** O(log n) insert with MinHeap instead of O(n) with array splice */
|
|
298
430
|
set(key, value, ttlMs) {
|
|
299
431
|
const expiresAt = Date.now() + (ttlMs ?? this.ttlMs);
|
|
300
432
|
this.cache.set(key, { value, expiresAt });
|
|
301
|
-
// Add to expiry heap -
|
|
302
|
-
|
|
303
|
-
let hi = this.expiryHeap.length;
|
|
304
|
-
while (lo < hi) {
|
|
305
|
-
const mid = (lo + hi) >>> 1;
|
|
306
|
-
if (this.expiryHeap[mid].expiresAt < expiresAt) {
|
|
307
|
-
lo = mid + 1;
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
hi = mid;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
this.expiryHeap.splice(lo, 0, { expiresAt, key });
|
|
433
|
+
// Add to expiry heap - O(log n) with MinHeap
|
|
434
|
+
this.expiryHeap.push({ expiresAt, key });
|
|
314
435
|
}
|
|
315
436
|
has(key) {
|
|
316
437
|
return this.get(key) !== undefined;
|
|
@@ -321,7 +442,7 @@ export class TTLMap {
|
|
|
321
442
|
}
|
|
322
443
|
clear() {
|
|
323
444
|
this.cache.clear();
|
|
324
|
-
this.expiryHeap.
|
|
445
|
+
this.expiryHeap.clear();
|
|
325
446
|
}
|
|
326
447
|
stop() {
|
|
327
448
|
if (this.cleanupInterval) {
|
package/dist/shared/lru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../src/shared/lru.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../src/shared/lru.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skip List Implementation
|
|
3
|
+
* Probabilistic data structure with O(log n) insert, delete, search
|
|
4
|
+
* Ideal for sorted collections with frequent modifications
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Skip List with O(log n) operations
|
|
8
|
+
* - insert: O(log n)
|
|
9
|
+
* - delete: O(log n)
|
|
10
|
+
* - search: O(log n)
|
|
11
|
+
* - range query: O(log n + k) where k = results
|
|
12
|
+
*/
|
|
13
|
+
export declare class SkipList<T> {
|
|
14
|
+
private readonly maxLevel;
|
|
15
|
+
private readonly probability;
|
|
16
|
+
private readonly compare;
|
|
17
|
+
private head;
|
|
18
|
+
private level;
|
|
19
|
+
private _size;
|
|
20
|
+
/**
|
|
21
|
+
* Create a skip list
|
|
22
|
+
* @param compare Comparator function (negative if a < b, positive if a > b, 0 if equal)
|
|
23
|
+
* @param maxLevel Maximum level (default 16, supports ~65k elements efficiently)
|
|
24
|
+
* @param probability Level promotion probability (default 0.5)
|
|
25
|
+
*/
|
|
26
|
+
constructor(compare: (a: T, b: T) => number, maxLevel?: number, probability?: number);
|
|
27
|
+
/** Current number of elements */
|
|
28
|
+
get size(): number;
|
|
29
|
+
/** Check if empty */
|
|
30
|
+
get isEmpty(): boolean;
|
|
31
|
+
/** Generate random level for new node */
|
|
32
|
+
private randomLevel;
|
|
33
|
+
/**
|
|
34
|
+
* Insert value - O(log n)
|
|
35
|
+
*/
|
|
36
|
+
insert(value: T): void;
|
|
37
|
+
/**
|
|
38
|
+
* Delete value - O(log n)
|
|
39
|
+
* @returns true if found and deleted
|
|
40
|
+
*/
|
|
41
|
+
delete(value: T): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Delete by predicate - O(n) worst case, but typically O(log n + k)
|
|
44
|
+
* Useful when you need to match by a subset of fields
|
|
45
|
+
*/
|
|
46
|
+
deleteWhere(predicate: (value: T) => boolean): T | null;
|
|
47
|
+
/**
|
|
48
|
+
* Find exact value - O(log n)
|
|
49
|
+
*/
|
|
50
|
+
find(value: T): T | null;
|
|
51
|
+
/**
|
|
52
|
+
* Check if value exists - O(log n)
|
|
53
|
+
*/
|
|
54
|
+
has(value: T): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get first (minimum) element - O(1)
|
|
57
|
+
*/
|
|
58
|
+
first(): T | null;
|
|
59
|
+
/**
|
|
60
|
+
* Remove and return first element - O(log n)
|
|
61
|
+
*/
|
|
62
|
+
shift(): T | null;
|
|
63
|
+
/**
|
|
64
|
+
* Range query: get all values where comparator returns <= 0
|
|
65
|
+
* O(log n + k) where k = number of results
|
|
66
|
+
* @param maxValue Upper bound (inclusive)
|
|
67
|
+
* @param limit Maximum number of results
|
|
68
|
+
*/
|
|
69
|
+
rangeUntil(maxValue: T, limit?: number): T[];
|
|
70
|
+
/**
|
|
71
|
+
* Get all values where predicate is true, starting from first
|
|
72
|
+
* Stops at first false (assumes sorted order matches predicate)
|
|
73
|
+
* O(k) where k = matching results
|
|
74
|
+
*/
|
|
75
|
+
takeWhile(predicate: (value: T) => boolean, limit?: number): T[];
|
|
76
|
+
/**
|
|
77
|
+
* Iterate all values in order
|
|
78
|
+
*/
|
|
79
|
+
values(): Generator<T>;
|
|
80
|
+
/**
|
|
81
|
+
* Convert to array
|
|
82
|
+
*/
|
|
83
|
+
toArray(): T[];
|
|
84
|
+
/**
|
|
85
|
+
* Clear all elements
|
|
86
|
+
*/
|
|
87
|
+
clear(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Filter and remove elements matching predicate
|
|
90
|
+
* Returns removed elements
|
|
91
|
+
* O(n) but removes in-place
|
|
92
|
+
*/
|
|
93
|
+
removeAll(predicate: (value: T) => boolean): T[];
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=skipList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skipList.d.ts","sourceRoot":"","sources":["../../src/shared/skipList.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;;;GAMG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAa;IAE1B;;;;;OAKG;gBACS,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,QAAQ,GAAE,MAAW,EAAE,WAAW,GAAE,MAAY;IAO7F,iCAAiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qBAAqB;IACrB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,yCAAyC;IACzC,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAkDtB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IA0CzB;;;OAGG;IACH,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,GAAG,IAAI;IAYvD;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;IAkBxB;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAItB;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,IAAI;IAIjB;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,IAAI;IAOjB;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;IAa5C;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;IAahE;;OAEG;IACF,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;IAQvB;;OAEG;IACH,OAAO,IAAI,CAAC,EAAE;IAId;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,EAAE;CAejD"}
|