bunqueue 1.1.3 → 1.2.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/README.md +37 -0
- package/dist/application/dlqManager.d.ts.map +1 -1
- package/dist/application/dlqManager.js +11 -3
- package/dist/application/dlqManager.js.map +1 -1
- package/dist/application/eventsManager.d.ts +10 -1
- package/dist/application/eventsManager.d.ts.map +1 -1
- package/dist/application/eventsManager.js +91 -21
- package/dist/application/eventsManager.js.map +1 -1
- package/dist/application/operations/ack.d.ts +16 -1
- package/dist/application/operations/ack.d.ts.map +1 -1
- package/dist/application/operations/ack.js +269 -5
- package/dist/application/operations/ack.js.map +1 -1
- package/dist/application/operations/jobManagement.d.ts.map +1 -1
- package/dist/application/operations/jobManagement.js +17 -3
- package/dist/application/operations/jobManagement.js.map +1 -1
- package/dist/application/operations/pull.d.ts +1 -0
- package/dist/application/operations/pull.d.ts.map +1 -1
- package/dist/application/operations/pull.js +106 -8
- package/dist/application/operations/pull.js.map +1 -1
- package/dist/application/operations/push.d.ts.map +1 -1
- package/dist/application/operations/push.js +9 -0
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/operations/queueControl.d.ts +4 -1
- package/dist/application/operations/queueControl.d.ts.map +1 -1
- package/dist/application/operations/queueControl.js +16 -13
- package/dist/application/operations/queueControl.js.map +1 -1
- package/dist/application/queueManager.d.ts +28 -2
- package/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +132 -34
- package/dist/application/queueManager.js.map +1 -1
- package/dist/application/webhookManager.d.ts +7 -1
- package/dist/application/webhookManager.d.ts.map +1 -1
- package/dist/application/webhookManager.js +38 -6
- package/dist/application/webhookManager.js.map +1 -1
- package/dist/application/workerManager.d.ts +5 -1
- package/dist/application/workerManager.d.ts.map +1 -1
- package/dist/application/workerManager.js +35 -10
- package/dist/application/workerManager.js.map +1 -1
- package/dist/bunqueue +0 -0
- package/dist/cli/commands/backup.d.ts +20 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +143 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +6 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/domain/queue/priorityQueue.d.ts +15 -0
- package/dist/domain/queue/priorityQueue.d.ts.map +1 -1
- package/dist/domain/queue/priorityQueue.js +40 -0
- package/dist/domain/queue/priorityQueue.js.map +1 -1
- package/dist/domain/queue/shard.d.ts +67 -0
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +198 -0
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/infrastructure/backup/index.d.ts +5 -0
- package/dist/infrastructure/backup/index.d.ts.map +1 -0
- package/dist/infrastructure/backup/index.js +5 -0
- package/dist/infrastructure/backup/index.js.map +1 -0
- package/dist/infrastructure/backup/s3Backup.d.ts +101 -0
- package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -0
- package/dist/infrastructure/backup/s3Backup.js +313 -0
- package/dist/infrastructure/backup/s3Backup.js.map +1 -0
- package/dist/infrastructure/persistence/sqlite.d.ts +3 -1
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +25 -4
- package/dist/infrastructure/persistence/sqlite.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 +49 -18
- package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
- package/dist/infrastructure/server/handlers/advanced.d.ts +1 -1
- package/dist/infrastructure/server/handlers/advanced.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/advanced.js +14 -11
- package/dist/infrastructure/server/handlers/advanced.js.map +1 -1
- package/dist/infrastructure/server/handlers/core.d.ts +2 -2
- package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/core.js +6 -12
- 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 +22 -27
- package/dist/infrastructure/server/http.js.map +1 -1
- package/dist/infrastructure/server/rateLimiter.d.ts +4 -3
- package/dist/infrastructure/server/rateLimiter.d.ts.map +1 -1
- package/dist/infrastructure/server/rateLimiter.js +71 -19
- package/dist/infrastructure/server/rateLimiter.js.map +1 -1
- package/dist/main.js +18 -0
- package/dist/main.js.map +1 -1
- package/dist/shared/hash.d.ts +4 -4
- package/dist/shared/hash.d.ts.map +1 -1
- package/dist/shared/hash.js +20 -4
- package/dist/shared/hash.js.map +1 -1
- package/dist/shared/lock.d.ts +7 -1
- package/dist/shared/lock.d.ts.map +1 -1
- package/dist/shared/lock.js +75 -40
- package/dist/shared/lock.js.map +1 -1
- package/dist/shared/logger.d.ts +1 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +1 -0
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/lru.d.ts +55 -0
- package/dist/shared/lru.d.ts.map +1 -1
- package/dist/shared/lru.js +165 -2
- package/dist/shared/lru.js.map +1 -1
- package/dist/shared/minHeap.d.ts +35 -0
- package/dist/shared/minHeap.d.ts.map +1 -0
- package/dist/shared/minHeap.js +116 -0
- package/dist/shared/minHeap.js.map +1 -0
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -20,6 +20,7 @@ const clientCommands = [
|
|
|
20
20
|
'stats',
|
|
21
21
|
'metrics',
|
|
22
22
|
'health',
|
|
23
|
+
'backup',
|
|
23
24
|
];
|
|
24
25
|
const firstArg = process.argv[2];
|
|
25
26
|
const isClientCommand = firstArg && clientCommands.includes(firstArg);
|
|
@@ -39,6 +40,9 @@ import { createHttpServer } from './infrastructure/server/http';
|
|
|
39
40
|
import { Logger, serverLog, statsLog } from './shared/logger';
|
|
40
41
|
import { stopRateLimiter } from './infrastructure/server/rateLimiter';
|
|
41
42
|
import { VERSION } from './shared/version';
|
|
43
|
+
import { S3BackupManager } from './infrastructure/backup';
|
|
44
|
+
import { SHARD_COUNT } from './shared/hash';
|
|
45
|
+
import { cpus } from 'os';
|
|
42
46
|
/** Load configuration from environment variables */
|
|
43
47
|
function loadConfig() {
|
|
44
48
|
return {
|
|
@@ -49,6 +53,7 @@ function loadConfig() {
|
|
|
49
53
|
dataPath: process.env.DATA_PATH ?? process.env.SQLITE_PATH,
|
|
50
54
|
corsOrigins: process.env.CORS_ALLOW_ORIGIN?.split(',').filter(Boolean) ?? ['*'],
|
|
51
55
|
requireAuthForMetrics: process.env.METRICS_AUTH === 'true',
|
|
56
|
+
s3BackupEnabled: process.env.S3_BACKUP_ENABLED === '1' || process.env.S3_BACKUP_ENABLED === 'true',
|
|
52
57
|
};
|
|
53
58
|
}
|
|
54
59
|
/** Print startup banner */
|
|
@@ -75,6 +80,8 @@ ${dim}────────────────────────
|
|
|
75
80
|
${green}●${reset} HTTP ${bold}${config.hostname}:${config.httpPort}${reset}
|
|
76
81
|
${yellow}●${reset} Data ${config.dataPath ?? 'in-memory'}
|
|
77
82
|
${yellow}●${reset} Auth ${config.authTokens.length > 0 ? `${green}enabled${reset}` : `${dim}disabled${reset}`}
|
|
83
|
+
${yellow}●${reset} Backup ${config.s3BackupEnabled ? `${green}S3 enabled${reset}` : `${dim}disabled${reset}`}
|
|
84
|
+
${dim}●${reset} Shards ${bold}${SHARD_COUNT}${reset} ${dim}(${cpus().length} CPU cores)${reset}
|
|
78
85
|
|
|
79
86
|
${dim}─────────────────────────────────────────────────${reset}
|
|
80
87
|
|
|
@@ -103,6 +110,13 @@ function startServer() {
|
|
|
103
110
|
corsOrigins: config.corsOrigins,
|
|
104
111
|
requireAuthForMetrics: config.requireAuthForMetrics,
|
|
105
112
|
});
|
|
113
|
+
// Initialize S3 backup manager
|
|
114
|
+
let backupManager = null;
|
|
115
|
+
if (config.dataPath) {
|
|
116
|
+
const backupConfig = S3BackupManager.fromEnv(config.dataPath);
|
|
117
|
+
backupManager = new S3BackupManager(backupConfig);
|
|
118
|
+
backupManager.start();
|
|
119
|
+
}
|
|
106
120
|
// Graceful shutdown
|
|
107
121
|
const shutdown = async (signal) => {
|
|
108
122
|
serverLog.info(`Received ${signal}, shutting down...`);
|
|
@@ -117,6 +131,10 @@ function startServer() {
|
|
|
117
131
|
serverLog.info(`Waiting for ${stats.active} active jobs...`);
|
|
118
132
|
await new Promise((r) => setTimeout(r, 1000));
|
|
119
133
|
}
|
|
134
|
+
// Stop backup manager
|
|
135
|
+
if (backupManager) {
|
|
136
|
+
backupManager.stop();
|
|
137
|
+
}
|
|
120
138
|
queueManager.shutdown();
|
|
121
139
|
stopRateLimiter();
|
|
122
140
|
serverLog.info('Shutdown complete');
|
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;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;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/hash.d.ts
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function fnv1a(str: string): number;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* Uses
|
|
11
|
+
* Shard configuration - auto-detected from hardware
|
|
12
|
+
* Uses power of 2 for fast bitwise mask
|
|
13
13
|
*/
|
|
14
|
-
export declare const SHARD_COUNT
|
|
15
|
-
export declare const SHARD_MASK
|
|
14
|
+
export declare const SHARD_COUNT: number;
|
|
15
|
+
export declare const SHARD_MASK: number;
|
|
16
16
|
export declare function shardIndex(key: string): number;
|
|
17
17
|
/**
|
|
18
18
|
* Calculate processing shard index from job ID (UUIDv7 string)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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;;GAEG;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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Fast hash functions
|
|
3
3
|
* FNV-1a implementation for consistent hashing
|
|
4
4
|
*/
|
|
5
|
+
import { cpus } from 'os';
|
|
5
6
|
const FNV_PRIME = 0x01000193;
|
|
6
7
|
const FNV_OFFSET = 0x811c9dc5;
|
|
7
8
|
/**
|
|
@@ -17,11 +18,26 @@ export function fnv1a(str) {
|
|
|
17
18
|
return hash >>> 0; // Convert to unsigned 32-bit
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
|
-
* Calculate shard
|
|
21
|
-
*
|
|
21
|
+
* Calculate optimal shard count based on CPU cores
|
|
22
|
+
* - Must be power of 2 for fast bitwise AND
|
|
23
|
+
* - At least equal to CPU cores for parallelism
|
|
24
|
+
* - Capped at 64 to avoid excessive memory overhead
|
|
22
25
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
function calculateShardCount() {
|
|
27
|
+
const cores = cpus().length || 4; // Fallback to 4 if detection fails
|
|
28
|
+
// Find next power of 2 >= cores, capped at 64
|
|
29
|
+
let shards = 1;
|
|
30
|
+
while (shards < cores && shards < 64) {
|
|
31
|
+
shards *= 2;
|
|
32
|
+
}
|
|
33
|
+
return shards;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Shard configuration - auto-detected from hardware
|
|
37
|
+
* Uses power of 2 for fast bitwise mask
|
|
38
|
+
*/
|
|
39
|
+
export const SHARD_COUNT = calculateShardCount();
|
|
40
|
+
export const SHARD_MASK = SHARD_COUNT - 1;
|
|
25
41
|
export function shardIndex(key) {
|
|
26
42
|
return fnv1a(key) & SHARD_MASK;
|
|
27
43
|
}
|
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,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;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/lock.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Async Lock implementation
|
|
3
3
|
* Provides read-write locks with timeout support
|
|
4
|
+
* Optimized with O(1) queue operations using wrapped resolvers
|
|
4
5
|
*/
|
|
5
6
|
/** Lock acquisition result */
|
|
6
7
|
export interface LockGuard {
|
|
@@ -13,6 +14,7 @@ export declare class LockTimeoutError extends Error {
|
|
|
13
14
|
/**
|
|
14
15
|
* Simple async mutex lock
|
|
15
16
|
* FIFO ordering for fairness
|
|
17
|
+
* O(1) timeout cancellation using marked entries instead of indexOf+splice
|
|
16
18
|
*/
|
|
17
19
|
export declare class AsyncLock {
|
|
18
20
|
private locked;
|
|
@@ -24,13 +26,14 @@ export declare class AsyncLock {
|
|
|
24
26
|
acquire(timeoutMs?: number): Promise<LockGuard>;
|
|
25
27
|
/** Check if lock is held */
|
|
26
28
|
isLocked(): boolean;
|
|
27
|
-
/** Get queue length */
|
|
29
|
+
/** Get queue length (includes cancelled entries) */
|
|
28
30
|
getQueueLength(): number;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* Read-Write Lock
|
|
32
34
|
* Multiple readers OR single writer
|
|
33
35
|
* Writers have priority to prevent starvation
|
|
36
|
+
* O(1) timeout cancellation using marked entries
|
|
34
37
|
*/
|
|
35
38
|
export declare class RWLock {
|
|
36
39
|
private readers;
|
|
@@ -46,8 +49,11 @@ export declare class RWLock {
|
|
|
46
49
|
/**
|
|
47
50
|
* Acquire write lock
|
|
48
51
|
* Exclusive access, no readers or other writers
|
|
52
|
+
* Optimized: synchronous fast path when uncontested
|
|
49
53
|
*/
|
|
50
54
|
acquireWrite(timeoutMs?: number): Promise<LockGuard>;
|
|
55
|
+
/** Create write lock guard - extracted to avoid code duplication */
|
|
56
|
+
private createWriteGuard;
|
|
51
57
|
/** Get current state */
|
|
52
58
|
getState(): {
|
|
53
59
|
readers: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/shared/lock.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/shared/lock.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,yBAAyB;AACzB,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,GAAE,MAAqC;CAI3D;AAQD;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C;;;OAGG;IACG,OAAO,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IA6C3D,4BAA4B;IAC5B,QAAQ,IAAI,OAAO;IAInB,oDAAoD;IACpD,cAAc,IAAI,MAAM;CAGzB;AAED;;;;;GAKG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEhD;;;OAGG;IACG,WAAW,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAgD/D;;;;OAIG;IACG,YAAY,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IA8ChE,oEAAoE;IACpE,OAAO,CAAC,gBAAgB;IA2BxB,wBAAwB;IACxB,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAOxE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
package/dist/shared/lock.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Async Lock implementation
|
|
3
3
|
* Provides read-write locks with timeout support
|
|
4
|
+
* Optimized with O(1) queue operations using wrapped resolvers
|
|
4
5
|
*/
|
|
5
6
|
/** Lock timeout error */
|
|
6
7
|
export class LockTimeoutError extends Error {
|
|
@@ -12,6 +13,7 @@ export class LockTimeoutError extends Error {
|
|
|
12
13
|
/**
|
|
13
14
|
* Simple async mutex lock
|
|
14
15
|
* FIFO ordering for fairness
|
|
16
|
+
* O(1) timeout cancellation using marked entries instead of indexOf+splice
|
|
15
17
|
*/
|
|
16
18
|
export class AsyncLock {
|
|
17
19
|
locked = false;
|
|
@@ -28,25 +30,32 @@ export class AsyncLock {
|
|
|
28
30
|
throw new LockTimeoutError();
|
|
29
31
|
}
|
|
30
32
|
await new Promise((resolve) => {
|
|
33
|
+
const entry = { resolve, cancelled: false };
|
|
31
34
|
const timer = setTimeout(() => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
this.queue.splice(idx, 1);
|
|
35
|
+
// O(1) cancellation - just mark as cancelled
|
|
36
|
+
entry.cancelled = true;
|
|
35
37
|
resolve();
|
|
36
38
|
}, remaining);
|
|
37
|
-
|
|
39
|
+
entry.resolve = () => {
|
|
38
40
|
clearTimeout(timer);
|
|
39
41
|
resolve();
|
|
40
|
-
}
|
|
42
|
+
};
|
|
43
|
+
this.queue.push(entry);
|
|
41
44
|
});
|
|
42
45
|
}
|
|
43
46
|
this.locked = true;
|
|
44
47
|
return {
|
|
45
48
|
release: () => {
|
|
46
49
|
this.locked = false;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
// Skip cancelled entries - O(k) where k = cancelled entries at head
|
|
51
|
+
let next = this.queue.shift();
|
|
52
|
+
while (next) {
|
|
53
|
+
if (!next.cancelled) {
|
|
54
|
+
next.resolve();
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
next = this.queue.shift();
|
|
58
|
+
}
|
|
50
59
|
},
|
|
51
60
|
};
|
|
52
61
|
}
|
|
@@ -54,7 +63,7 @@ export class AsyncLock {
|
|
|
54
63
|
isLocked() {
|
|
55
64
|
return this.locked;
|
|
56
65
|
}
|
|
57
|
-
/** Get queue length */
|
|
66
|
+
/** Get queue length (includes cancelled entries) */
|
|
58
67
|
getQueueLength() {
|
|
59
68
|
return this.queue.length;
|
|
60
69
|
}
|
|
@@ -63,6 +72,7 @@ export class AsyncLock {
|
|
|
63
72
|
* Read-Write Lock
|
|
64
73
|
* Multiple readers OR single writer
|
|
65
74
|
* Writers have priority to prevent starvation
|
|
75
|
+
* O(1) timeout cancellation using marked entries
|
|
66
76
|
*/
|
|
67
77
|
export class RWLock {
|
|
68
78
|
readers = 0;
|
|
@@ -83,16 +93,17 @@ export class RWLock {
|
|
|
83
93
|
throw new LockTimeoutError('Read lock acquisition timed out');
|
|
84
94
|
}
|
|
85
95
|
await new Promise((resolve) => {
|
|
96
|
+
const entry = { resolve, cancelled: false };
|
|
86
97
|
const timer = setTimeout(() => {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
this.readerQueue.splice(idx, 1);
|
|
98
|
+
// O(1) cancellation - just mark as cancelled
|
|
99
|
+
entry.cancelled = true;
|
|
90
100
|
resolve();
|
|
91
101
|
}, remaining);
|
|
92
|
-
|
|
102
|
+
entry.resolve = () => {
|
|
93
103
|
clearTimeout(timer);
|
|
94
104
|
resolve();
|
|
95
|
-
}
|
|
105
|
+
};
|
|
106
|
+
this.readerQueue.push(entry);
|
|
96
107
|
});
|
|
97
108
|
}
|
|
98
109
|
this.readers++;
|
|
@@ -100,9 +111,15 @@ export class RWLock {
|
|
|
100
111
|
release: () => {
|
|
101
112
|
this.readers--;
|
|
102
113
|
if (this.readers === 0 && this.writerWaiting > 0) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
// Skip cancelled entries
|
|
115
|
+
let next = this.writerQueue.shift();
|
|
116
|
+
while (next) {
|
|
117
|
+
if (!next.cancelled) {
|
|
118
|
+
next.resolve();
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
next = this.writerQueue.shift();
|
|
122
|
+
}
|
|
106
123
|
}
|
|
107
124
|
},
|
|
108
125
|
};
|
|
@@ -110,8 +127,15 @@ export class RWLock {
|
|
|
110
127
|
/**
|
|
111
128
|
* Acquire write lock
|
|
112
129
|
* Exclusive access, no readers or other writers
|
|
130
|
+
* Optimized: synchronous fast path when uncontested
|
|
113
131
|
*/
|
|
114
132
|
async acquireWrite(timeoutMs = 5000) {
|
|
133
|
+
// Fast path: uncontested - acquire synchronously without Promise overhead
|
|
134
|
+
if (!this.writer && this.readers === 0) {
|
|
135
|
+
this.writer = true;
|
|
136
|
+
return this.createWriteGuard();
|
|
137
|
+
}
|
|
138
|
+
// Slow path: contention - wait asynchronously
|
|
115
139
|
const start = Date.now();
|
|
116
140
|
this.writerWaiting++;
|
|
117
141
|
try {
|
|
@@ -121,44 +145,55 @@ export class RWLock {
|
|
|
121
145
|
throw new LockTimeoutError('Write lock acquisition timed out');
|
|
122
146
|
}
|
|
123
147
|
await new Promise((resolve) => {
|
|
148
|
+
const entry = { resolve, cancelled: false };
|
|
124
149
|
const timer = setTimeout(() => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.writerQueue.splice(idx, 1);
|
|
150
|
+
// O(1) cancellation - just mark as cancelled
|
|
151
|
+
entry.cancelled = true;
|
|
128
152
|
resolve();
|
|
129
153
|
}, remaining);
|
|
130
|
-
|
|
154
|
+
entry.resolve = () => {
|
|
131
155
|
clearTimeout(timer);
|
|
132
156
|
resolve();
|
|
133
|
-
}
|
|
157
|
+
};
|
|
158
|
+
this.writerQueue.push(entry);
|
|
134
159
|
});
|
|
135
160
|
}
|
|
136
161
|
this.writerWaiting--;
|
|
137
162
|
this.writer = true;
|
|
138
|
-
return
|
|
139
|
-
release: () => {
|
|
140
|
-
this.writer = false;
|
|
141
|
-
// Notify waiting writers first (priority)
|
|
142
|
-
if (this.writerWaiting > 0) {
|
|
143
|
-
const next = this.writerQueue.shift();
|
|
144
|
-
if (next)
|
|
145
|
-
next();
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
// Then notify all waiting readers
|
|
149
|
-
const readers = this.readerQueue.splice(0);
|
|
150
|
-
for (const reader of readers) {
|
|
151
|
-
reader();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
};
|
|
163
|
+
return this.createWriteGuard();
|
|
156
164
|
}
|
|
157
165
|
catch (e) {
|
|
158
166
|
this.writerWaiting--;
|
|
159
167
|
throw e;
|
|
160
168
|
}
|
|
161
169
|
}
|
|
170
|
+
/** Create write lock guard - extracted to avoid code duplication */
|
|
171
|
+
createWriteGuard() {
|
|
172
|
+
return {
|
|
173
|
+
release: () => {
|
|
174
|
+
this.writer = false;
|
|
175
|
+
// Notify waiting writers first (priority)
|
|
176
|
+
if (this.writerWaiting > 0) {
|
|
177
|
+
// Skip cancelled entries
|
|
178
|
+
let next = this.writerQueue.shift();
|
|
179
|
+
while (next) {
|
|
180
|
+
if (!next.cancelled) {
|
|
181
|
+
next.resolve();
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
next = this.writerQueue.shift();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Then notify all waiting readers (skip cancelled)
|
|
188
|
+
const readers = this.readerQueue.splice(0);
|
|
189
|
+
for (const entry of readers) {
|
|
190
|
+
if (!entry.cancelled) {
|
|
191
|
+
entry.resolve();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
162
197
|
/** Get current state */
|
|
163
198
|
getState() {
|
|
164
199
|
return {
|
package/dist/shared/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/shared/lock.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/shared/lock.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0CAA0C;AAC1C,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;gBAEH,SAAS,EAAE,MAAM;IAE9C,8BAA8B;IAC9B,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B,oDAAoD;IACpD,MAAM,CAAC,eAAe,IAAI,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CA6BZ;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,qBAAqB;AACrB,eAAO,MAAM,SAAS,QAAyB,CAAC;AAChD,eAAO,MAAM,MAAM,QAAsB,CAAC;AAC1C,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,KAAK,QAAqB,CAAC;AACxC,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0CAA0C;AAC1C,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;gBAEH,SAAS,EAAE,MAAM;IAE9C,8BAA8B;IAC9B,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B,oDAAoD;IACpD,MAAM,CAAC,eAAe,IAAI,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CA6BZ;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,qBAAqB;AACrB,eAAO,MAAM,SAAS,QAAyB,CAAC;AAChD,eAAO,MAAM,MAAM,QAAsB,CAAC;AAC1C,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,KAAK,QAAqB,CAAC;AACxC,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,SAAS,QAAyB,CAAC"}
|
package/dist/shared/logger.js
CHANGED
|
@@ -74,4 +74,5 @@ export const statsLog = createLogger('Stats');
|
|
|
74
74
|
export const storageLog = createLogger('Storage');
|
|
75
75
|
export const queueLog = createLogger('Queue');
|
|
76
76
|
export const webhookLog = createLogger('Webhook');
|
|
77
|
+
export const backupLog = createLogger('Backup');
|
|
77
78
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/lru.d.ts
CHANGED
|
@@ -55,15 +55,70 @@ export declare class LRUSet<T> implements SetLike<T> {
|
|
|
55
55
|
values(): IterableIterator<T>;
|
|
56
56
|
[Symbol.iterator](): IterableIterator<T>;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Bounded Set - fast FIFO eviction without LRU tracking
|
|
60
|
+
* Optimized for high-throughput scenarios where recency doesn't matter
|
|
61
|
+
* Uses batch eviction to avoid per-item iterator overhead
|
|
62
|
+
*/
|
|
63
|
+
export declare class BoundedSet<T> implements SetLike<T> {
|
|
64
|
+
private readonly cache;
|
|
65
|
+
private readonly maxSize;
|
|
66
|
+
private readonly onEvict?;
|
|
67
|
+
/** Evict 10% of items at once to amortize iterator cost */
|
|
68
|
+
private readonly evictBatchSize;
|
|
69
|
+
constructor(maxSize: number, onEvict?: (value: T) => void);
|
|
70
|
+
add(value: T): void;
|
|
71
|
+
/** Evict multiple items at once - more efficient than one at a time */
|
|
72
|
+
private evictBatch;
|
|
73
|
+
has(value: T): boolean;
|
|
74
|
+
delete(value: T): boolean;
|
|
75
|
+
clear(): void;
|
|
76
|
+
get size(): number;
|
|
77
|
+
values(): IterableIterator<T>;
|
|
78
|
+
[Symbol.iterator](): IterableIterator<T>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Bounded Map - fast FIFO eviction without LRU tracking
|
|
82
|
+
* Optimized for high-throughput scenarios where recency doesn't matter
|
|
83
|
+
* Uses batch eviction to avoid per-item iterator overhead
|
|
84
|
+
*/
|
|
85
|
+
export declare class BoundedMap<K, V> implements MapLike<K, V> {
|
|
86
|
+
private readonly cache;
|
|
87
|
+
private readonly maxSize;
|
|
88
|
+
private readonly onEvict?;
|
|
89
|
+
/** Evict 10% of items at once to amortize iterator cost */
|
|
90
|
+
private readonly evictBatchSize;
|
|
91
|
+
constructor(maxSize: number, onEvict?: (key: K, value: V) => void);
|
|
92
|
+
get(key: K): V | undefined;
|
|
93
|
+
set(key: K, value: V): void;
|
|
94
|
+
/** Evict multiple items at once - more efficient than one at a time */
|
|
95
|
+
private evictBatch;
|
|
96
|
+
has(key: K): boolean;
|
|
97
|
+
delete(key: K): boolean;
|
|
98
|
+
clear(): void;
|
|
99
|
+
get size(): number;
|
|
100
|
+
keys(): IterableIterator<K>;
|
|
101
|
+
values(): IterableIterator<V>;
|
|
102
|
+
entries(): IterableIterator<[K, V]>;
|
|
103
|
+
forEach(callback: (value: V, key: K) => void): void;
|
|
104
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
105
|
+
}
|
|
58
106
|
/**
|
|
59
107
|
* TTL Map - entries expire after timeout
|
|
108
|
+
* Optimized with expiry heap for O(k) cleanup instead of O(n)
|
|
60
109
|
*/
|
|
61
110
|
export declare class TTLMap<K, V> {
|
|
62
111
|
private readonly cache;
|
|
63
112
|
private readonly ttlMs;
|
|
64
113
|
private cleanupInterval;
|
|
114
|
+
/**
|
|
115
|
+
* Expiry heap: sorted array of (expiresAt, key) for efficient cleanup
|
|
116
|
+
* Oldest expiry at index 0
|
|
117
|
+
*/
|
|
118
|
+
private readonly expiryHeap;
|
|
65
119
|
constructor(ttlMs: number, cleanupIntervalMs?: number);
|
|
66
120
|
private startCleanup;
|
|
121
|
+
/** O(k) cleanup where k = expired entries, instead of O(n) full scan */
|
|
67
122
|
private cleanup;
|
|
68
123
|
get(key: K): V | undefined;
|
|
69
124
|
set(key: K, value: V, ttlMs?: number): void;
|
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;AAEH,+CAA+C;AAC/C,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACrB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,+CAA+C;AAC/C,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA6B;gBAE1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI;IAKjE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAU1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAkB3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI3B,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI7B,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAInC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAInD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAG9C;AAED;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;gBAElC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI;IAKzD,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAenB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAItB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI7B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;CAGzC;AAED
|
|
1
|
+
{"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../src/shared/lru.ts"],"names":[],"mappings":"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"}
|