@nxtedition/cache 2.1.15 → 2.1.16
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 +42 -38
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +358 -226
- package/lib/index.js.map +1 -1
- package/lib/memory.d.ts +2 -2
- package/lib/memory.d.ts.map +1 -1
- package/lib/memory.js +2 -2
- package/lib/memory.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ A two-tier async cache with SQLite persistence, in-memory pseudo-LRU, stale-whil
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Two-tier storage** — In-memory cache backed by SQLite on disk
|
|
8
|
-
- **File-sharded SQLite** — Keys are hash-routed across N independent SQLite files, bypassing SQLite's per-file writer serialization. ~
|
|
8
|
+
- **File-sharded SQLite** — Keys are hash-routed across N independent SQLite files, bypassing SQLite's per-file writer serialization. ~50% higher throughput under multi-thread write contention (see [Benchmarks](#benchmarks)).
|
|
9
9
|
- **Stale-while-revalidate** — Serve stale data synchronously while refreshing in the background
|
|
10
10
|
- **Request coalescing** — Concurrent fetches for the same key share a single in-flight `Promise`
|
|
11
11
|
- **Cross-thread locking** — `SharedArrayBuffer` + `Atomics.compareExchange` / `Atomics.waitAsync` prevent redundant `valueSelector` calls across worker threads in the same process that share the same `location`
|
|
@@ -140,16 +140,22 @@ Forces a new fetch via `valueSelector` regardless of cache state. Unlike `get()`
|
|
|
140
140
|
|
|
141
141
|
Remove an entry from both memory and SQLite. Also cancels any in-flight deduplication for that key — a pending fetch will still resolve for its callers, but the result is **not** written to the cache.
|
|
142
142
|
|
|
143
|
-
#### `cache.
|
|
143
|
+
#### `cache.gc(): void`
|
|
144
144
|
|
|
145
145
|
Remove all expired entries (past `ttl + stale`) from both the in-memory cache and SQLite, and run `PRAGMA wal_checkpoint(TRUNCATE)` + `PRAGMA optimize`.
|
|
146
146
|
|
|
147
|
+
#### `cache.flushSync(): void`
|
|
148
|
+
|
|
149
|
+
Synchronously drain all pending batched writes to SQLite. The cache remains open and usable afterwards. This is useful when you need to guarantee persistence at a specific point without closing the cache (e.g. before handing off to another cache instance that shares the same database).
|
|
150
|
+
|
|
147
151
|
#### `cache.close(): void`
|
|
148
152
|
|
|
149
|
-
|
|
153
|
+
Calls `flushSync()` to drain pending writes, then closes the SQLite database and releases resources. Clears all in-flight deduplication. Operations after `close()` throw.
|
|
150
154
|
|
|
151
155
|
Also available as `[Symbol.dispose]()` for use with `using` declarations.
|
|
152
156
|
|
|
157
|
+
Open caches are automatically closed on the `beforeExit` event, ensuring pending writes are flushed before the process exits.
|
|
158
|
+
|
|
153
159
|
#### `cache.stats`
|
|
154
160
|
|
|
155
161
|
Returns runtime statistics:
|
|
@@ -193,11 +199,11 @@ Once the stale window expires, the entry is purged entirely and the next `get()`
|
|
|
193
199
|
|
|
194
200
|
## Cross-Thread Locking
|
|
195
201
|
|
|
196
|
-
Worker threads in the same process that pass the same `location` to `new Cache(...)` share a `SharedArrayBuffer` (acquired via `@nxtedition/shared`'s `getOrCreate` registry). That buffer is treated as a hash table of per-key
|
|
202
|
+
Worker threads in the same process that pass the same `location` to `new Cache(...)` share a 256 KiB `SharedArrayBuffer` (64K `Int32` slots, acquired via `@nxtedition/shared`'s `getOrCreate` registry). That buffer is treated as a hash table of per-key binary mutex slots:
|
|
197
203
|
|
|
198
|
-
- Acquire
|
|
199
|
-
-
|
|
200
|
-
- Exception paths (sync `valueSelector` throw, async rejection, serializer/ttl/stale throwing inside `#set`)
|
|
204
|
+
- **Acquire:** `Atomics.compareExchange(slot, 0, 1)`. The winner runs `valueSelector`; losers call `Atomics.waitAsync` (with a 1 s timeout as a guard against missed notifies and holder crashes). On timeout, the waiter falls back to a lockless refresh.
|
|
205
|
+
- **Release:** The holder does `Atomics.sub(slot, 1)` + `Atomics.notify` inside the batched flush, waking waiters which then read the freshly-cached value from the database.
|
|
206
|
+
- **Exception safety:** All exception paths (sync `valueSelector` throw, async rejection, serializer/ttl/stale throwing inside `#set`) release the slot under a `try/finally`, so a buggy user callback can never wedge a slot.
|
|
201
207
|
|
|
202
208
|
When the `location` is `':memory:'`, the cache is inherently per-instance (the SQLite DB isn't shared), so the SAB is skipped entirely and all coordination falls back to the instance-local `#dedupe` Map.
|
|
203
209
|
|
|
@@ -211,10 +217,6 @@ There is **no cross-process coordination** — two separate Node processes point
|
|
|
211
217
|
- Single-threaded app that doesn't spawn workers — disable to skip the cheap SAB round-trip on every `get()` cache miss.
|
|
212
218
|
- Workload where each worker uses a disjoint keyspace — the SAB adds overhead without any dedupe benefit.
|
|
213
219
|
|
|
214
|
-
### Counter overflow
|
|
215
|
-
|
|
216
|
-
Each slot is an `Int32`. `refresh()` uses `Atomics.add(slot, 1)` rather than a CAS (so concurrent refreshes stack), with an overflow guard at `0xfffffff` — if the counter ever reaches that value the call throws `Error: lock counter overflow` and rolls the increment back, so a wedged slot can't silently wrap. In practice this is unreachable: `0xfffffff` = ~268 M in-flight refreshes, which would OOM long before hitting the guard.
|
|
217
|
-
|
|
218
220
|
## File Sharding
|
|
219
221
|
|
|
220
222
|
The cache partitions its SQLite storage across N physical files (default `shards: 4`). Each key is hash-routed (via xxhash32) to one shard, and reads/writes for that key only touch that shard's connection. This is intended to reduce the SQLite writer-serialization ceiling: SQLite allows only one writer at a time per database file, even in WAL mode, so a single file caps concurrent-writer throughput at roughly one thread's worth of work regardless of how many threads the process spawns.
|
|
@@ -248,7 +250,7 @@ If a shard's database is full (`SQLITE_FULL`), the cache evicts the 256 oldest e
|
|
|
248
250
|
|
|
249
251
|
## Off-Peak Purge
|
|
250
252
|
|
|
251
|
-
All cache instances listen on the `nxt:offPeak` `BroadcastChannel`. When a message is received, `
|
|
253
|
+
All cache instances listen on the `nxt:offPeak` `BroadcastChannel`. When a message is received, `gc()` is called on every active instance, enabling coordinated cleanup during low-traffic periods.
|
|
252
254
|
|
|
253
255
|
## Benchmarks
|
|
254
256
|
|
|
@@ -256,39 +258,41 @@ Measured on Apple M3 Pro (12 CPUs), Node 25.6.1. Throughput is `ops/sec`; latenc
|
|
|
256
258
|
|
|
257
259
|
### Single-thread hot paths
|
|
258
260
|
|
|
259
|
-
| Operation | ops/sec | p50 | p99
|
|
260
|
-
| ------------------------------------------- | ------- | ------ |
|
|
261
|
-
| `get()` memory hit (sequential keys) |
|
|
262
|
-
| `get()` memory hit (random keys) |
|
|
263
|
-
| `peek()` memory hit |
|
|
264
|
-
| `get()` memory miss, DB hit (sequential) |
|
|
265
|
-
| `get()` memory miss, DB hit (random) |
|
|
266
|
-
| `get()` cold (sync `valueSelector`) |
|
|
267
|
-
| `get()` memory-only hit (no DB) |
|
|
268
|
-
| `get()` memory-only cold (no DB) | 1.
|
|
269
|
-
| `get()` eviction pressure (`maxCount=1000`) | 1.
|
|
270
|
-
| `delete()` existing keys |
|
|
271
|
-
| `
|
|
261
|
+
| Operation | ops/sec | p50 | p99 |
|
|
262
|
+
| ------------------------------------------- | ------- | ------ | ------- |
|
|
263
|
+
| `get()` memory hit (sequential keys) | 4.90 M | 125 ns | 666 ns |
|
|
264
|
+
| `get()` memory hit (random keys) | 6.05 M | 125 ns | 584 ns |
|
|
265
|
+
| `peek()` memory hit | 8.05 M | 125 ns | 250 ns |
|
|
266
|
+
| `get()` memory miss, DB hit (sequential) | 303 K | 2.3 µs | 10.6 µs |
|
|
267
|
+
| `get()` memory miss, DB hit (random) | 399 K | 2.3 µs | 6.4 µs |
|
|
268
|
+
| `get()` cold (sync `valueSelector`) | 274 K | 1.8 µs | 4.5 µs |
|
|
269
|
+
| `get()` memory-only hit (no DB) | 5.39 M | 125 ns | 500 ns |
|
|
270
|
+
| `get()` memory-only cold (no DB) | 1.16 M | 708 ns | 2.3 µs |
|
|
271
|
+
| `get()` eviction pressure (`maxCount=1000`) | 1.64 M | 542 ns | 1.5 µs |
|
|
272
|
+
| `delete()` existing keys | 67 K | 13 µs | 44 µs |
|
|
273
|
+
| `gc()` 10 K expired entries | 7.2 ms | — | — |
|
|
272
274
|
|
|
273
275
|
### Shard-count comparison
|
|
274
276
|
|
|
275
|
-
Single-thread overhead of sharding on the hot paths is ≤
|
|
277
|
+
Single-thread overhead of sharding on the hot paths is ≤5 % in either direction. The pay-off is under multi-thread write contention:
|
|
276
278
|
|
|
277
|
-
**
|
|
279
|
+
**12 threads, partitioned cold writes** (each worker writes unique keys, stressing concurrent writers):
|
|
278
280
|
|
|
279
281
|
| `shards` | Aggregate throughput | Scaling vs. 1 thread | Δ vs. `shards: 1` |
|
|
280
282
|
| -------- | -------------------- | -------------------- | ----------------- |
|
|
281
|
-
| 1 |
|
|
282
|
-
| 2 |
|
|
283
|
-
| 4 |
|
|
283
|
+
| 1 | 154 K ops/s | 0.80× | baseline |
|
|
284
|
+
| 2 | 223 K ops/s | 1.04× | **+45 %** |
|
|
285
|
+
| 4 | 237 K ops/s | 1.37× | **+54 %** |
|
|
286
|
+
| 8 | 182 K ops/s | 1.08× | **+19 %** |
|
|
284
287
|
|
|
285
|
-
**
|
|
288
|
+
**12 threads, shared-keys hot-hit** (mostly memory-resident; sharding shouldn't help much here):
|
|
286
289
|
|
|
287
290
|
| `shards` | Aggregate throughput |
|
|
288
291
|
| -------- | -------------------- |
|
|
289
|
-
| 1 |
|
|
290
|
-
| 2 |
|
|
291
|
-
| 4 |
|
|
292
|
+
| 1 | 7.69 M ops/s |
|
|
293
|
+
| 2 | 7.86 M ops/s |
|
|
294
|
+
| 4 | 7.70 M ops/s |
|
|
295
|
+
| 8 | 7.51 M ops/s |
|
|
292
296
|
|
|
293
297
|
So `shards: 4` (the default) is a large win for write-heavy multi-threaded workloads and roughly break-even otherwise. If you run single-threaded or strictly read-heavy, `shards: 1` removes all sharding overhead and restores the single-file on-disk layout.
|
|
294
298
|
|
|
@@ -296,17 +300,17 @@ So `shards: 4` (the default) is a large win for write-heavy multi-threaded workl
|
|
|
296
300
|
|
|
297
301
|
| Path | lock enabled | lock disabled |
|
|
298
302
|
| --------------------------------- | ------------ | ------------- |
|
|
299
|
-
| `get()` cold (sync valueSelector) |
|
|
300
|
-
| `get()` memory hit |
|
|
303
|
+
| `get()` cold (sync valueSelector) | 298 K ops/s | 306 K ops/s |
|
|
304
|
+
| `get()` memory hit | 7.44 M ops/s | 6.19 M ops/s |
|
|
301
305
|
|
|
302
|
-
Cross-thread SAB locking adds ~
|
|
306
|
+
Cross-thread SAB locking adds ~3 % on the cold path and is negligible on memory hits. It is worth leaving on unless the workload is strictly single-threaded or partitioned across workers.
|
|
303
307
|
|
|
304
308
|
### Reproducing
|
|
305
309
|
|
|
306
310
|
```sh
|
|
307
311
|
yarn build
|
|
308
312
|
node scripts/bench.mjs # full bench suite
|
|
309
|
-
node scripts/bench-shards.mjs # shard-count comparison (1, 2, 4 shards)
|
|
313
|
+
node scripts/bench-shards.mjs # shard-count comparison (1, 2, 4, 8 shards)
|
|
310
314
|
```
|
|
311
315
|
|
|
312
316
|
## Scripts
|
package/lib/index.d.ts
CHANGED
|
@@ -49,12 +49,13 @@ export declare class Cache<V = unknown, A extends unknown[] = [string]> extends
|
|
|
49
49
|
} | undefined;
|
|
50
50
|
};
|
|
51
51
|
[Symbol.dispose](): void;
|
|
52
|
+
flushSync(): void;
|
|
52
53
|
close(): void;
|
|
53
54
|
get(...args: A): CacheResult<V>;
|
|
54
55
|
peek(...args: A): CacheResult<V>;
|
|
55
56
|
refresh(...args: A): CacheResult<V>;
|
|
56
57
|
delete(...args: A): void;
|
|
57
|
-
|
|
58
|
+
gc(): void;
|
|
58
59
|
}
|
|
59
60
|
/** @deprecated Use `Cache` instead. */
|
|
60
61
|
export declare const AsyncCache: typeof Cache;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAO1C,OAAO,EAAsC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpF,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAO1C,OAAO,EAAsC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpF,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAiDhD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;IACrD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,CAAC,CAAA;CAC1C;AAaD,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;IACpD,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI,CAAA;IACrC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,GAAG,IAAI,CAAA;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;CAC3B;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACtC;IAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CAAA;AAEtC,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,WAAW,EAAE,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,EAAE,CAAA;CACtD;AA6FD,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAE,SAAQ,YAAY;;gBAuChF,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAClD,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,MAAM,EACpC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAuHxB,IAAI,KAAK;;;;;;;;;;;sBACmB,MAAM;kBAAQ,MAAM,GAAG,SAAS;;MAqB3D;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;IAIhB,SAAS;IAiBT,KAAK;IA4BL,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAO/B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAOhC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAcnC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI;IAYxB,EAAE,IAAI,IAAI;CA6bX;AA2BD,uCAAuC;AACvC,eAAO,MAAM,UAAU,cAAQ,CAAA;AAC/B,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA"}
|
package/lib/index.js
CHANGED
|
@@ -9,10 +9,33 @@ function maybeToBuffer(value) {
|
|
|
9
9
|
: value;
|
|
10
10
|
}
|
|
11
11
|
function isThenable(value) {
|
|
12
|
-
|
|
12
|
+
if (value == null) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
// Accessing `.then` can throw when it's a toxic getter. Without this guard
|
|
16
|
+
// a user valueSelector returning `{ get then() { throw ... } }` would crash
|
|
17
|
+
// #refresh on the isThenable check *after* the valueSelector try/catch had
|
|
18
|
+
// already exited, leaving the lock acquired — subsequent reads on the same
|
|
19
|
+
// key would hang indefinitely. Treat a throwing `.then` as non-thenable.
|
|
20
|
+
try {
|
|
21
|
+
return typeof value.then === 'function';
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
13
26
|
}
|
|
14
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
28
|
const dbs = new Set();
|
|
29
|
+
process.on('beforeExit', () => {
|
|
30
|
+
for (const db of dbs) {
|
|
31
|
+
try {
|
|
32
|
+
db.close();
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
process.emitWarning(err);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
16
39
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
40
|
const defaultSerializer = {
|
|
18
41
|
serialize(value) {
|
|
@@ -23,74 +46,73 @@ const defaultSerializer = {
|
|
|
23
46
|
return ArrayBuffer.isView(data) ? data : JSON.parse(data);
|
|
24
47
|
},
|
|
25
48
|
};
|
|
26
|
-
const VERSION =
|
|
49
|
+
const VERSION = 6;
|
|
27
50
|
const MAX_DURATION = 365000000e3;
|
|
28
51
|
const HASHER = await xxhash();
|
|
29
52
|
class DatabaseShard {
|
|
30
53
|
location;
|
|
31
54
|
databaseTimeout = 20;
|
|
32
|
-
database
|
|
33
|
-
getQuery
|
|
34
|
-
delQuery
|
|
35
|
-
|
|
36
|
-
evictQuery
|
|
37
|
-
pageCountQuery
|
|
38
|
-
pageSizeQuery
|
|
39
|
-
setQuery
|
|
55
|
+
database;
|
|
56
|
+
getQuery;
|
|
57
|
+
delQuery;
|
|
58
|
+
purgeExpiredQuery;
|
|
59
|
+
evictQuery;
|
|
60
|
+
pageCountQuery;
|
|
61
|
+
pageSizeQuery;
|
|
62
|
+
setQuery;
|
|
40
63
|
setBatch = [];
|
|
41
64
|
constructor(location, opts) {
|
|
42
65
|
this.location = location;
|
|
66
|
+
this.databaseTimeout = opts?.timeout ?? 20;
|
|
43
67
|
for (let n = 0; true; n++) {
|
|
44
68
|
try {
|
|
45
|
-
|
|
46
|
-
this.databaseTimeout = opts?.timeout ?? 20;
|
|
47
|
-
this.database ??= new DatabaseSync(location, { timeout: this.databaseTimeout });
|
|
48
|
-
this.database.exec(`
|
|
49
|
-
PRAGMA journal_mode = WAL;
|
|
50
|
-
PRAGMA synchronous = OFF;
|
|
51
|
-
PRAGMA wal_autocheckpoint = 10000;
|
|
52
|
-
PRAGMA cache_size = -${Math.ceil(maxSize / 1024 / 8)};
|
|
53
|
-
PRAGMA mmap_size = ${maxSize};
|
|
54
|
-
PRAGMA max_page_count = ${Math.ceil(maxSize / 4096)};
|
|
55
|
-
PRAGMA optimize;
|
|
56
|
-
|
|
57
|
-
CREATE TABLE IF NOT EXISTS cache_v${VERSION} (
|
|
58
|
-
key TEXT PRIMARY KEY NOT NULL,
|
|
59
|
-
val BLOB NOT NULL,
|
|
60
|
-
ttl INTEGER NOT NULL,
|
|
61
|
-
stale INTEGER NOT NULL
|
|
62
|
-
) WITHOUT ROWID;
|
|
63
|
-
|
|
64
|
-
CREATE INDEX IF NOT EXISTS cache_v${VERSION}_stale_idx ON cache_v${VERSION}(stale);
|
|
65
|
-
`);
|
|
66
|
-
this.getQuery = this.database.prepare(`SELECT val, ttl, stale FROM cache_v${VERSION} WHERE key = ? AND stale > ?`);
|
|
67
|
-
this.setQuery = this.database.prepare(`INSERT OR REPLACE INTO cache_v${VERSION} (key, val, ttl, stale) VALUES (?, ?, ?, ?)`);
|
|
68
|
-
this.delQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE key = ?`);
|
|
69
|
-
this.purgeStaleQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE stale <= ?`);
|
|
70
|
-
this.evictQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE key IN (SELECT key FROM cache_v${VERSION} ORDER BY stale ASC LIMIT ?)`);
|
|
71
|
-
this.pageCountQuery = this.database.prepare('PRAGMA page_count');
|
|
72
|
-
this.pageSizeQuery = this.database.prepare('PRAGMA page_size');
|
|
69
|
+
this.database = new DatabaseSync(location, { timeout: this.databaseTimeout });
|
|
73
70
|
break;
|
|
74
71
|
}
|
|
75
72
|
catch (err) {
|
|
76
|
-
|
|
73
|
+
// Check the retry limit BEFORE sleeping so we don't block for 100ms
|
|
74
|
+
// on the final failure before throwing.
|
|
77
75
|
if (n >= 16) {
|
|
78
|
-
this[Symbol.dispose]();
|
|
79
76
|
throw err;
|
|
80
77
|
}
|
|
78
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
|
|
81
79
|
}
|
|
82
80
|
}
|
|
81
|
+
const maxSize = opts?.maxSize ?? 128 * 1024 * 1024;
|
|
82
|
+
try {
|
|
83
|
+
this.database.exec(`
|
|
84
|
+
PRAGMA journal_mode = WAL;
|
|
85
|
+
PRAGMA synchronous = OFF;
|
|
86
|
+
PRAGMA wal_autocheckpoint = 10000;
|
|
87
|
+
PRAGMA cache_size = -${Math.ceil(maxSize / 1024 / 8)};
|
|
88
|
+
PRAGMA mmap_size = ${maxSize};
|
|
89
|
+
PRAGMA max_page_count = ${Math.ceil(maxSize / 4096)};
|
|
90
|
+
PRAGMA optimize;
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS cache_v${VERSION} (
|
|
93
|
+
key TEXT PRIMARY KEY NOT NULL,
|
|
94
|
+
val BLOB NOT NULL,
|
|
95
|
+
stale INTEGER NOT NULL,
|
|
96
|
+
expire INTEGER NOT NULL
|
|
97
|
+
) WITHOUT ROWID;
|
|
98
|
+
|
|
99
|
+
CREATE INDEX IF NOT EXISTS cache_v${VERSION}_expire_idx ON cache_v${VERSION}(expire);
|
|
100
|
+
`);
|
|
101
|
+
this.getQuery = this.database.prepare(`SELECT val, stale, expire FROM cache_v${VERSION} WHERE key = ? AND expire > ?`);
|
|
102
|
+
this.setQuery = this.database.prepare(`INSERT OR REPLACE INTO cache_v${VERSION} (key, val, stale, expire) VALUES (?, ?, ?, ?)`);
|
|
103
|
+
this.delQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE key = ?`);
|
|
104
|
+
this.purgeExpiredQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE expire <= ?`);
|
|
105
|
+
this.evictQuery = this.database.prepare(`DELETE FROM cache_v${VERSION} WHERE key IN (SELECT key FROM cache_v${VERSION} ORDER BY expire ASC LIMIT ?)`);
|
|
106
|
+
this.pageCountQuery = this.database.prepare('PRAGMA page_count');
|
|
107
|
+
this.pageSizeQuery = this.database.prepare('PRAGMA page_size');
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
this.database.close();
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
83
113
|
}
|
|
84
114
|
[Symbol.dispose]() {
|
|
85
|
-
this.
|
|
86
|
-
this.setQuery = null;
|
|
87
|
-
this.delQuery = null;
|
|
88
|
-
this.purgeStaleQuery = null;
|
|
89
|
-
this.evictQuery = null;
|
|
90
|
-
this.pageCountQuery = null;
|
|
91
|
-
this.pageSizeQuery = null;
|
|
92
|
-
this.database?.close();
|
|
93
|
-
this.database = null;
|
|
115
|
+
this.database.close();
|
|
94
116
|
}
|
|
95
117
|
}
|
|
96
118
|
export class Cache extends EventEmitter {
|
|
@@ -107,10 +129,23 @@ export class Cache extends EventEmitter {
|
|
|
107
129
|
#location;
|
|
108
130
|
#shards = null;
|
|
109
131
|
#emitError = (err) => {
|
|
110
|
-
|
|
111
|
-
|
|
132
|
+
// emit('error', err) rethrows synchronously if a user listener throws.
|
|
133
|
+
// #emitError is called from many places that iterate over shards (#flush,
|
|
134
|
+
// gc, constructor catch, the offPeak BroadcastChannel handler);
|
|
135
|
+
// a rethrow there would starve the remaining shards and skip cleanup
|
|
136
|
+
// (e.g. #flush's tail-uncork, gc's busy_timeout restore). Swallow
|
|
137
|
+
// listener throws and surface them as a warning so diagnostics aren't
|
|
138
|
+
// silently dropped.
|
|
139
|
+
try {
|
|
140
|
+
if (this.listenerCount('error') > 0) {
|
|
141
|
+
this.emit('error', err);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
process.emitWarning(err);
|
|
145
|
+
}
|
|
112
146
|
}
|
|
113
|
-
|
|
147
|
+
catch (listenerErr) {
|
|
148
|
+
process.emitWarning(listenerErr);
|
|
114
149
|
process.emitWarning(err);
|
|
115
150
|
}
|
|
116
151
|
};
|
|
@@ -155,7 +190,8 @@ export class Cache extends EventEmitter {
|
|
|
155
190
|
this.#lockArray = null;
|
|
156
191
|
}
|
|
157
192
|
else {
|
|
158
|
-
|
|
193
|
+
const size = 64 * 1024 * Int32Array.BYTES_PER_ELEMENT;
|
|
194
|
+
this.#lockArray = new Int32Array(getOrCreate(`__@nxtedition/cache/${location}`, size));
|
|
159
195
|
}
|
|
160
196
|
if (opts?.serializer !== undefined) {
|
|
161
197
|
if (typeof opts.serializer !== 'object' || opts.serializer === null) {
|
|
@@ -175,13 +211,27 @@ export class Cache extends EventEmitter {
|
|
|
175
211
|
this.#shards = null;
|
|
176
212
|
}
|
|
177
213
|
else {
|
|
214
|
+
// Option-shape validation runs synchronously and throws: these are
|
|
215
|
+
// programmer errors, not the environmental open failures that the
|
|
216
|
+
// try/catch below converts to error events. Keeping the two paths
|
|
217
|
+
// separate matches how other constructor validations (lock, ttl, …)
|
|
218
|
+
// behave.
|
|
219
|
+
const count = opts?.database?.shards ?? (location === ':memory:' ? 1 : 4);
|
|
220
|
+
if (!Number.isInteger(count)) {
|
|
221
|
+
throw new TypeError('database.shards must be a positive integer');
|
|
222
|
+
}
|
|
223
|
+
if (count < 1) {
|
|
224
|
+
throw new RangeError('database.shards must be a positive integer');
|
|
225
|
+
}
|
|
226
|
+
if (location === ':memory:' && count !== 1) {
|
|
227
|
+
throw new RangeError('in-memory database does not support sharding');
|
|
228
|
+
}
|
|
178
229
|
this.#shards = [];
|
|
179
230
|
try {
|
|
180
231
|
if (location === ':memory:') {
|
|
181
232
|
this.#shards.push(new DatabaseShard(location, opts?.database));
|
|
182
233
|
}
|
|
183
234
|
else {
|
|
184
|
-
const count = opts?.database?.shards ?? 4;
|
|
185
235
|
for (let n = 0; n < count; n++) {
|
|
186
236
|
this.#shards.push(new DatabaseShard(count === 1 ? location : location + '.' + n, {
|
|
187
237
|
...opts?.database,
|
|
@@ -192,7 +242,14 @@ export class Cache extends EventEmitter {
|
|
|
192
242
|
}
|
|
193
243
|
catch (err) {
|
|
194
244
|
for (const shard of this.#shards) {
|
|
195
|
-
|
|
245
|
+
// Guard so one bad dispose can't starve the rest and skip the
|
|
246
|
+
// nulling + emitError below.
|
|
247
|
+
try {
|
|
248
|
+
shard[Symbol.dispose]();
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Already failing the cache construction; swallow dispose errors.
|
|
252
|
+
}
|
|
196
253
|
}
|
|
197
254
|
this.#shards = null;
|
|
198
255
|
this.#emitError(err);
|
|
@@ -228,23 +285,41 @@ export class Cache extends EventEmitter {
|
|
|
228
285
|
[Symbol.dispose]() {
|
|
229
286
|
this.close();
|
|
230
287
|
}
|
|
231
|
-
|
|
288
|
+
flushSync() {
|
|
289
|
+
if (this.#closed) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// Drain pending flushes. The pending #flushHandle was scheduled by a
|
|
293
|
+
// prior #set that already corked the memory cache; #flush's tail-uncork
|
|
294
|
+
// balances that cork when it finishes. Do NOT cork again here — the old
|
|
295
|
+
// code did, leaving the memory cache in a permanently-corked state
|
|
296
|
+
// after close (cork() +1 per iteration, uncork() only -1 per completed
|
|
297
|
+
// flush), which disabled pruning on the now-orphaned MemoryCache.
|
|
232
298
|
while (this.#flushHandle) {
|
|
233
299
|
clearImmediate(this.#flushHandle);
|
|
234
|
-
this.#memory?.cork();
|
|
235
300
|
this.#flush();
|
|
236
301
|
}
|
|
302
|
+
}
|
|
303
|
+
close() {
|
|
304
|
+
if (this.#closed) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
this.flushSync();
|
|
237
308
|
this.#closed = true;
|
|
238
309
|
this.#dedupe.clear();
|
|
239
310
|
dbs.delete(this);
|
|
240
311
|
for (const shard of this.#shards ?? []) {
|
|
241
|
-
shard
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
312
|
+
// Guard each dispose so one shard's close failure doesn't starve the
|
|
313
|
+
// rest and leave #shards as a partially-disposed array.
|
|
314
|
+
try {
|
|
315
|
+
shard[Symbol.dispose]();
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
this.#emitError(err);
|
|
319
|
+
}
|
|
247
320
|
}
|
|
321
|
+
this.#shards = null;
|
|
322
|
+
globalThis.__nxt_cache = globalThis.__nxt_cache?.filter((ref) => ref.deref() != null && ref.deref() !== this);
|
|
248
323
|
}
|
|
249
324
|
get(...args) {
|
|
250
325
|
if (this.#closed) {
|
|
@@ -267,16 +342,6 @@ export class Cache extends EventEmitter {
|
|
|
267
342
|
throw new TypeError('keySelector must return a non-empty string');
|
|
268
343
|
}
|
|
269
344
|
const hash = HASHER.h32(key);
|
|
270
|
-
if (this.#lockArray) {
|
|
271
|
-
const idx = hash % this.#lockArray.length;
|
|
272
|
-
if (Atomics.add(this.#lockArray, idx, 1) >= 0xfffffff) {
|
|
273
|
-
// Roll back the increment before throwing so we don't leak the slot.
|
|
274
|
-
if (Atomics.sub(this.#lockArray, idx, 1) === 1) {
|
|
275
|
-
Atomics.notify(this.#lockArray, idx);
|
|
276
|
-
}
|
|
277
|
-
throw new Error('lock counter overflow');
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
345
|
return this.#refresh(args, key, hash);
|
|
281
346
|
}
|
|
282
347
|
delete(...args) {
|
|
@@ -290,28 +355,38 @@ export class Cache extends EventEmitter {
|
|
|
290
355
|
const hash = HASHER.h32(key);
|
|
291
356
|
this.#set(key, undefined, hash);
|
|
292
357
|
}
|
|
293
|
-
|
|
358
|
+
gc() {
|
|
294
359
|
if (this.#closed) {
|
|
295
360
|
throw new Error('cache is closed');
|
|
296
361
|
}
|
|
297
|
-
this.#memory?.
|
|
362
|
+
this.#memory?.gc(Date.now());
|
|
298
363
|
for (const shard of this.#shards ?? []) {
|
|
299
|
-
|
|
364
|
+
// Wrap the initial busy_timeout bump — if exec throws here, the old
|
|
365
|
+
// code threw out of the whole method, starving the remaining shards
|
|
366
|
+
// and leaving this shard's timeout unchanged (so the finally-branch
|
|
367
|
+
// restore wouldn't run either).
|
|
368
|
+
try {
|
|
369
|
+
shard.database.exec('PRAGMA busy_timeout = 5000');
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
this.#emitError(err);
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
300
375
|
try {
|
|
301
376
|
try {
|
|
302
|
-
shard.
|
|
377
|
+
shard.purgeExpiredQuery.run(Date.now());
|
|
303
378
|
}
|
|
304
379
|
catch (err) {
|
|
305
380
|
this.#emitError(err);
|
|
306
381
|
}
|
|
307
382
|
try {
|
|
308
|
-
shard.database
|
|
383
|
+
shard.database.exec('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
309
384
|
}
|
|
310
385
|
catch (err) {
|
|
311
386
|
this.#emitError(err);
|
|
312
387
|
}
|
|
313
388
|
try {
|
|
314
|
-
shard.database
|
|
389
|
+
shard.database.exec('PRAGMA optimize');
|
|
315
390
|
}
|
|
316
391
|
catch (err) {
|
|
317
392
|
this.#emitError(err);
|
|
@@ -319,7 +394,7 @@ export class Cache extends EventEmitter {
|
|
|
319
394
|
}
|
|
320
395
|
finally {
|
|
321
396
|
try {
|
|
322
|
-
shard.database
|
|
397
|
+
shard.database.exec(`PRAGMA busy_timeout = ${shard.databaseTimeout}`);
|
|
323
398
|
}
|
|
324
399
|
catch (err) {
|
|
325
400
|
this.#emitError(err);
|
|
@@ -328,6 +403,9 @@ export class Cache extends EventEmitter {
|
|
|
328
403
|
}
|
|
329
404
|
}
|
|
330
405
|
#load(args, refresh) {
|
|
406
|
+
if (this.#closed) {
|
|
407
|
+
throw new Error('cache is closed');
|
|
408
|
+
}
|
|
331
409
|
const key = this.#keySelector(...args);
|
|
332
410
|
if (typeof key !== 'string' || key.length === 0) {
|
|
333
411
|
throw new TypeError('keySelector must return a non-empty string');
|
|
@@ -336,128 +414,154 @@ export class Cache extends EventEmitter {
|
|
|
336
414
|
const hash = HASHER.h32(key);
|
|
337
415
|
let cached = this.#memory?.get(key);
|
|
338
416
|
if (cached === undefined) {
|
|
339
|
-
|
|
340
|
-
const shard = this.#shards ? this.#shards[hash % this.#shards.length] : null;
|
|
341
|
-
const row = shard?.getQuery?.get(key, now);
|
|
342
|
-
if (row !== undefined) {
|
|
343
|
-
const entry = this.#loadRow(key, row);
|
|
344
|
-
this.#memory?.set(key, entry);
|
|
345
|
-
cached = entry;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
catch (err) {
|
|
349
|
-
this.#emitError(err);
|
|
350
|
-
}
|
|
417
|
+
cached = this.#get(key, hash, now);
|
|
351
418
|
}
|
|
352
|
-
if (
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
cached = undefined;
|
|
360
|
-
}
|
|
419
|
+
else if (now >= cached.expire) {
|
|
420
|
+
// stale-while-revalidate has expired, purge cached value.
|
|
421
|
+
this.#memory?.delete(key);
|
|
422
|
+
cached = undefined;
|
|
423
|
+
}
|
|
424
|
+
if (cached !== undefined && now < cached.stale) {
|
|
425
|
+
return { value: cached.value, async: false };
|
|
361
426
|
}
|
|
362
427
|
if (!refresh) {
|
|
363
428
|
// peek: return stale value if available, undefined if expired or missing
|
|
364
429
|
return { value: cached?.value, async: false };
|
|
365
430
|
}
|
|
366
|
-
{
|
|
367
|
-
const pending = this.#dedupe.get(key);
|
|
368
|
-
if (pending !== undefined) {
|
|
369
|
-
return { async: true, value: pending };
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
431
|
const idx = this.#lockArray ? hash % this.#lockArray.length : -1;
|
|
373
432
|
if (cached !== undefined) {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
433
|
+
// Stale-while-revalidate: every concurrent caller returns stale sync.
|
|
434
|
+
// Only the caller that actually wins the lock kicks off a background
|
|
435
|
+
// refresh — checking #dedupe first avoids redundant in-flight refreshes
|
|
436
|
+
// from prior callers. Without this, the first caller would return sync
|
|
437
|
+
// stale while later callers (seeing the pending promise) would
|
|
438
|
+
// inconsistently return async fresh for the same stale state.
|
|
439
|
+
if (!this.#dedupe.has(key)) {
|
|
440
|
+
try {
|
|
441
|
+
const val = this.#lockArray ? Atomics.compareExchange(this.#lockArray, idx, 0, 1) : 0;
|
|
442
|
+
if (val === 0) {
|
|
443
|
+
const result = this.#refresh(args, key, hash, true);
|
|
444
|
+
if (!result.async) {
|
|
445
|
+
return result;
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
result.value.catch((err) => {
|
|
449
|
+
this.#emitError(err);
|
|
450
|
+
});
|
|
451
|
+
}
|
|
385
452
|
}
|
|
386
453
|
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
454
|
+
catch (err) {
|
|
455
|
+
this.#emitError(err);
|
|
456
|
+
}
|
|
390
457
|
}
|
|
391
458
|
return { async: false, value: cached.value };
|
|
392
459
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
460
|
+
// Fully expired (or never cached): concurrent callers share one pending
|
|
461
|
+
// refresh via #dedupe.
|
|
462
|
+
{
|
|
463
|
+
const pending = this.#dedupe.get(key);
|
|
464
|
+
if (pending !== undefined) {
|
|
465
|
+
return { async: true, value: pending };
|
|
397
466
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
467
|
+
}
|
|
468
|
+
if (!this.#lockArray) {
|
|
469
|
+
return this.#refresh(args, key, hash, false);
|
|
470
|
+
}
|
|
471
|
+
const val = Atomics.compareExchange(this.#lockArray, idx, 0, 1);
|
|
472
|
+
if (val === 0) {
|
|
473
|
+
return this.#refresh(args, key, hash, true);
|
|
474
|
+
}
|
|
475
|
+
const { async, value } = Atomics.waitAsync(this.#lockArray, idx, val, 1e3);
|
|
476
|
+
if (async) {
|
|
477
|
+
return {
|
|
478
|
+
async: true,
|
|
479
|
+
value: value.then(() => this.#getOrRefresh(args, key, hash, now).value),
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
return this.#getOrRefresh(args, key, hash, now);
|
|
483
|
+
}
|
|
484
|
+
#getOrRefresh(args, key, hash, now) {
|
|
485
|
+
if (this.#closed) {
|
|
486
|
+
throw new Error('cache is closed');
|
|
487
|
+
}
|
|
488
|
+
const entry = this.#get(key, hash, now);
|
|
489
|
+
if (entry !== undefined) {
|
|
490
|
+
return { async: false, value: entry.value };
|
|
491
|
+
}
|
|
492
|
+
// The caller that released the lock may have failed to write a new
|
|
493
|
+
// value due to a database error, or may have written a value that
|
|
494
|
+
// expired by the time we woke up. In either case, fall back to
|
|
495
|
+
// refreshing the value ourselves — this is the same path as a
|
|
496
|
+
// cache miss, so it handles all the same edge cases (concurrent
|
|
497
|
+
// refreshes, database errors, etc) with the same robustness.
|
|
498
|
+
// Also note that locks are coarse and we might have been woken
|
|
499
|
+
// by a different key's release, so we can't assume anything
|
|
500
|
+
// about the state of the current key, but that's fine.
|
|
501
|
+
// There is a slight issue of potential thundering herd here if
|
|
502
|
+
// many callers are all waiting on the same lock and the refreshed
|
|
503
|
+
// value is always expired or fails to write.
|
|
504
|
+
return this.#refresh(args, key, hash, false);
|
|
505
|
+
}
|
|
506
|
+
#get(key, hash = HASHER.h32(key), now = Date.now()) {
|
|
507
|
+
try {
|
|
508
|
+
const shard = this.#shards ? this.#shards[hash % this.#shards.length] : null;
|
|
509
|
+
const row = shard?.getQuery.get(key, now);
|
|
510
|
+
if (row === undefined) {
|
|
511
|
+
return undefined;
|
|
404
512
|
}
|
|
513
|
+
const entry = this.#loadRow(key, row);
|
|
514
|
+
this.#memory?.set(key, entry);
|
|
515
|
+
return entry;
|
|
405
516
|
}
|
|
406
|
-
|
|
517
|
+
catch (err) {
|
|
518
|
+
this.#emitError(err);
|
|
519
|
+
}
|
|
520
|
+
return undefined;
|
|
407
521
|
}
|
|
408
522
|
#release(hash) {
|
|
409
|
-
if (
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
const idx = hash % this.#lockArray.length;
|
|
413
|
-
if (Atomics.sub(this.#lockArray, idx, 1) === 1) {
|
|
523
|
+
if (this.#lockArray) {
|
|
524
|
+
const idx = hash % this.#lockArray.length;
|
|
525
|
+
Atomics.sub(this.#lockArray, idx, 1);
|
|
414
526
|
Atomics.notify(this.#lockArray, idx);
|
|
415
527
|
}
|
|
416
528
|
}
|
|
417
|
-
#refresh(args, key, hash = HASHER.h32(key)) {
|
|
529
|
+
#refresh(args, key, hash = HASHER.h32(key), acquired = false) {
|
|
418
530
|
let value;
|
|
419
531
|
try {
|
|
420
532
|
value = this.#valueSelector(...args);
|
|
421
533
|
}
|
|
422
534
|
catch (err) {
|
|
423
|
-
|
|
535
|
+
if (acquired) {
|
|
536
|
+
this.#release(hash);
|
|
537
|
+
}
|
|
424
538
|
throw err;
|
|
425
539
|
}
|
|
426
540
|
if (!isThenable(value)) {
|
|
427
|
-
|
|
428
|
-
this.#set(key, value, hash);
|
|
429
|
-
}
|
|
430
|
-
finally {
|
|
431
|
-
this.#release(hash);
|
|
432
|
-
}
|
|
541
|
+
this.#set(key, value, hash, acquired);
|
|
433
542
|
return { async: false, value };
|
|
434
543
|
}
|
|
435
544
|
// Store the chained promise (with #set + lock-release wired in) in #dedupe
|
|
436
545
|
// so concurrent get() callers see the same Promise instance as the original
|
|
437
546
|
// caller — required for promise-identity-based dedupe semantics.
|
|
438
547
|
const promise = Promise.resolve(value).then((value) => {
|
|
439
|
-
//
|
|
440
|
-
//
|
|
441
|
-
//
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
if
|
|
447
|
-
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
finally {
|
|
548
|
+
// Identity check: if delete() or another refresh replaced our dedupe
|
|
549
|
+
// entry, skip the write so we don't resurrect a deleted key or
|
|
550
|
+
// overwrite a newer value. #set itself clears dedupe on entry.
|
|
551
|
+
if (this.#dedupe.get(key) === promise) {
|
|
552
|
+
this.#set(key, value, hash, acquired);
|
|
553
|
+
}
|
|
554
|
+
else if (acquired) {
|
|
555
|
+
// Even if we're not going to write the value, we still need to release
|
|
556
|
+
// the lock so that other callers aren't starved.
|
|
451
557
|
this.#release(hash);
|
|
452
558
|
}
|
|
453
559
|
return value;
|
|
454
560
|
}, (err) => {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
this.#dedupe.delete(key);
|
|
458
|
-
}
|
|
561
|
+
if (this.#dedupe.get(key) === promise) {
|
|
562
|
+
this.#dedupe.delete(key);
|
|
459
563
|
}
|
|
460
|
-
|
|
564
|
+
if (acquired) {
|
|
461
565
|
this.#release(hash);
|
|
462
566
|
}
|
|
463
567
|
throw err;
|
|
@@ -465,58 +569,80 @@ export class Cache extends EventEmitter {
|
|
|
465
569
|
this.#dedupe.set(key, promise);
|
|
466
570
|
return { async: true, value: promise };
|
|
467
571
|
}
|
|
468
|
-
#set(key, value, hash = HASHER.h32(key)) {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
572
|
+
#set(key, value, hash = HASHER.h32(key), acquired = false) {
|
|
573
|
+
try {
|
|
574
|
+
if (typeof key !== 'string' || key.length === 0) {
|
|
575
|
+
throw new TypeError('key must be a non-empty string');
|
|
576
|
+
}
|
|
577
|
+
// Drop any in-flight dedupe entry so an async refresh that resolves after
|
|
578
|
+
// this call cannot resurrect a deleted key or overwrite a newer value —
|
|
579
|
+
// the async path's onFulfilled identity-checks before calling #set.
|
|
580
|
+
this.#dedupe.delete(key);
|
|
581
|
+
const shard = this.#shards ? this.#shards[hash % this.#shards.length] : null;
|
|
582
|
+
if (value === undefined) {
|
|
583
|
+
// Slow path... Should not be common...
|
|
584
|
+
this.#memory?.delete(key);
|
|
585
|
+
if (shard) {
|
|
586
|
+
for (const item of shard.setBatch.splice(0)) {
|
|
587
|
+
if (item.key !== key) {
|
|
588
|
+
shard.setBatch.push(item);
|
|
589
|
+
}
|
|
590
|
+
else if (item.acquired) {
|
|
591
|
+
this.#release(item.hash);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
try {
|
|
595
|
+
shard.delQuery.run(key);
|
|
596
|
+
}
|
|
597
|
+
catch (err) {
|
|
598
|
+
this.#emitError(err);
|
|
599
|
+
}
|
|
487
600
|
}
|
|
601
|
+
return;
|
|
488
602
|
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
603
|
+
const ttlValue = Math.min(MAX_DURATION, this.#ttl(value, key) ?? Infinity);
|
|
604
|
+
if (!Number.isFinite(ttlValue) || ttlValue < 0) {
|
|
605
|
+
throw new TypeError('ttl must be undefined, null, or a non-negative finite number');
|
|
606
|
+
}
|
|
607
|
+
const staleValue = Math.min(MAX_DURATION, this.#stale(value, key) ?? Infinity);
|
|
608
|
+
if (!Number.isFinite(staleValue) || staleValue < 0) {
|
|
609
|
+
throw new TypeError('stale must be undefined, null, or a non-negative finite number');
|
|
610
|
+
}
|
|
611
|
+
const now = Date.now();
|
|
612
|
+
const stale = now + ttlValue;
|
|
613
|
+
const expire = stale + staleValue;
|
|
614
|
+
if (expire <= now) {
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
const data = this.#serializer.serialize(value);
|
|
618
|
+
const entry = this.#createEntry(key, value, stale, expire, ArrayBuffer.isView(data) ? data.byteLength : data.length * 2);
|
|
619
|
+
this.#memory?.set(key, entry);
|
|
620
|
+
if (!shard) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
if (!this.#flushHandle) {
|
|
624
|
+
this.#memory?.cork();
|
|
625
|
+
this.#flushHandle = setImmediate(this.#flush);
|
|
626
|
+
}
|
|
627
|
+
else if (shard.setBatch.length > 512) {
|
|
628
|
+
clearImmediate(this.#flushHandle);
|
|
629
|
+
this.#flush();
|
|
630
|
+
}
|
|
631
|
+
shard.setBatch.push({ key, data, stale, expire, hash, acquired });
|
|
632
|
+
acquired = false;
|
|
510
633
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
634
|
+
finally {
|
|
635
|
+
if (acquired) {
|
|
636
|
+
this.#release(hash);
|
|
637
|
+
}
|
|
514
638
|
}
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
639
|
+
}
|
|
640
|
+
#releaseBatch(batch, start, deleteCount) {
|
|
641
|
+
for (const item of batch.splice(start, deleteCount)) {
|
|
642
|
+
if (item.acquired) {
|
|
643
|
+
this.#release(item.hash);
|
|
644
|
+
}
|
|
518
645
|
}
|
|
519
|
-
shard.setBatch.push({ key, data, ttl, stale });
|
|
520
646
|
}
|
|
521
647
|
#flush = () => {
|
|
522
648
|
this.#flushHandle = null;
|
|
@@ -527,23 +653,23 @@ export class Cache extends EventEmitter {
|
|
|
527
653
|
const shard = this.#shards[(idx + k) % len];
|
|
528
654
|
try {
|
|
529
655
|
for (let retryCount = 0; true; retryCount++) {
|
|
530
|
-
if (
|
|
656
|
+
if (shard.setBatch.length === 0) {
|
|
531
657
|
break;
|
|
532
658
|
}
|
|
533
659
|
let n = 0;
|
|
534
660
|
try {
|
|
535
661
|
shard.database.exec('BEGIN');
|
|
536
662
|
while (n < shard.setBatch.length) {
|
|
537
|
-
const { key, data,
|
|
663
|
+
const { key, data, stale, expire } = shard.setBatch[n++];
|
|
538
664
|
if (data != null) {
|
|
539
|
-
shard.setQuery
|
|
665
|
+
shard.setQuery.run(key, data, stale, expire);
|
|
540
666
|
}
|
|
541
667
|
else {
|
|
542
|
-
shard.delQuery
|
|
668
|
+
shard.delQuery.run(key);
|
|
543
669
|
}
|
|
544
670
|
}
|
|
545
671
|
shard.database.exec('COMMIT');
|
|
546
|
-
shard.setBatch
|
|
672
|
+
this.#releaseBatch(shard.setBatch, 0, n);
|
|
547
673
|
break;
|
|
548
674
|
}
|
|
549
675
|
catch (err) {
|
|
@@ -558,9 +684,7 @@ export class Cache extends EventEmitter {
|
|
|
558
684
|
// already rolled back automatically
|
|
559
685
|
// TODO (fix): Check that the error is what we expect (something like "no transaction is active")...
|
|
560
686
|
}
|
|
561
|
-
if (err?.errcode === 13 /* SQLITE_FULL */ &&
|
|
562
|
-
retryCount < 3 &&
|
|
563
|
-
shard.evictQuery != null) {
|
|
687
|
+
if (err?.errcode === 13 /* SQLITE_FULL */ && retryCount < 3) {
|
|
564
688
|
shard.evictQuery.run(256);
|
|
565
689
|
}
|
|
566
690
|
else {
|
|
@@ -569,14 +693,14 @@ export class Cache extends EventEmitter {
|
|
|
569
693
|
// #memory until natural eviction/TTL, which is fine for cache semantics
|
|
570
694
|
// — callers already accept that cache values can disappear at any time.
|
|
571
695
|
// Do NOT flag this as silent data loss (see closed issue #167).
|
|
572
|
-
shard.setBatch
|
|
696
|
+
this.#releaseBatch(shard.setBatch, 0, n);
|
|
573
697
|
throw err;
|
|
574
698
|
}
|
|
575
699
|
}
|
|
576
700
|
}
|
|
577
701
|
}
|
|
578
702
|
catch (err) {
|
|
579
|
-
shard.setBatch.length
|
|
703
|
+
this.#releaseBatch(shard.setBatch, 0, shard.setBatch.length);
|
|
580
704
|
this.#emitError(err);
|
|
581
705
|
}
|
|
582
706
|
if (performance.now() - startTime > 10) {
|
|
@@ -586,10 +710,10 @@ export class Cache extends EventEmitter {
|
|
|
586
710
|
}
|
|
587
711
|
this.#memory?.uncork();
|
|
588
712
|
};
|
|
589
|
-
#createEntry(key, value,
|
|
713
|
+
#createEntry(key, value, stale, expire, size) {
|
|
590
714
|
return {
|
|
591
|
-
ttl,
|
|
592
715
|
stale,
|
|
716
|
+
expire,
|
|
593
717
|
value,
|
|
594
718
|
key,
|
|
595
719
|
size,
|
|
@@ -599,7 +723,7 @@ export class Cache extends EventEmitter {
|
|
|
599
723
|
}
|
|
600
724
|
#loadRow(key, row) {
|
|
601
725
|
const value = this.#serializer.deserialize(maybeToBuffer(row.val));
|
|
602
|
-
return this.#createEntry(key, value, row.
|
|
726
|
+
return this.#createEntry(key, value, row.stale, row.expire, ArrayBuffer.isView(row.val) ? row.val.byteLength : row.val.length * 2);
|
|
603
727
|
}
|
|
604
728
|
}
|
|
605
729
|
{
|
|
@@ -608,13 +732,21 @@ export class Cache extends EventEmitter {
|
|
|
608
732
|
offPeakBC.onmessage = () => {
|
|
609
733
|
for (const db of dbs) {
|
|
610
734
|
try {
|
|
611
|
-
db.
|
|
735
|
+
db.gc();
|
|
612
736
|
}
|
|
613
737
|
catch (err) {
|
|
614
|
-
|
|
615
|
-
|
|
738
|
+
// Match #emitError semantics: don't let a throwing user error
|
|
739
|
+
// listener starve the remaining caches in `dbs`.
|
|
740
|
+
try {
|
|
741
|
+
if (db.listenerCount('error') > 0) {
|
|
742
|
+
db.emit('error', err);
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
process.emitWarning(err);
|
|
746
|
+
}
|
|
616
747
|
}
|
|
617
|
-
|
|
748
|
+
catch (listenerErr) {
|
|
749
|
+
process.emitWarning(listenerErr);
|
|
618
750
|
process.emitWarning(err);
|
|
619
751
|
}
|
|
620
752
|
}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAA0C,MAAM,aAAa,CAAA;AAElF,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAA6C,MAAM,aAAa,CAAA;AAIpF,SAAS,aAAa,CAAC,KAA+B;IACpD,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;QAC/D,CAAC,CAAC,KAAK,CAAA;AACX,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAQ,KAA8B,CAAC,IAAI,KAAK,UAAU,CAAA;AACpF,CAAC;AAED,8DAA8D;AAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAA;AAyBtC,8DAA8D;AAC9D,MAAM,iBAAiB,GAAoB;IACzC,SAAS,CAAC,KAAK;QACb,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClF,CAAC;IACD,WAAW,CAAC,IAAI;QACd,gEAAgE;QAChE,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3D,CAAC;CACF,CAAA;AAoBD,MAAM,OAAO,GAAG,CAAC,CAAA;AACjB,MAAM,YAAY,GAAG,WAAW,CAAA;AAChC,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAA;AAE7B,MAAM,aAAa;IACjB,QAAQ,CAAQ;IAChB,eAAe,GAAW,EAAE,CAAA;IAC5B,QAAQ,GAAwB,IAAI,CAAA;IACpC,QAAQ,GAAyB,IAAI,CAAA;IACrC,QAAQ,GAAyB,IAAI,CAAA;IACrC,eAAe,GAAyB,IAAI,CAAA;IAC5C,UAAU,GAAyB,IAAI,CAAA;IACvC,cAAc,GAAyB,IAAI,CAAA;IAC3C,aAAa,GAAyB,IAAI,CAAA;IAC1C,QAAQ,GAAyB,IAAI,CAAA;IACrC,QAAQ,GAA4E,EAAE,CAAA;IAEtF,YAAY,QAAgB,EAAE,IAAsB;QAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;gBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAA;gBAE1C,IAAI,CAAC,QAAQ,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;gBAE/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;iCAIM,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;+BAC/B,OAAO;oCACF,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;;8CAGf,OAAO;;;;;;;8CAOP,OAAO,wBAAwB,OAAO;SAC3E,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnC,sCAAsC,OAAO,8BAA8B,CAC5E,CAAA;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnC,iCAAiC,OAAO,6CAA6C,CACtF,CAAA;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,OAAO,gBAAgB,CAAC,CAAA;gBACpF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAC1C,sBAAsB,OAAO,mBAAmB,CACjD,CAAA;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CACrC,sBAAsB,OAAO,yCAAyC,OAAO,8BAA8B,CAC5G,CAAA;gBAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;gBAChE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;gBAC9D,MAAK;YACP,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;gBAEjE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;oBACtB,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;CACF;AAED,MAAM,OAAO,KAAmD,SAAQ,YAAY;IAClF,OAAO,CAAuB;IAC9B,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAA;IACvC,OAAO,GAAG,KAAK,CAAA;IAEf,cAAc,CAAoC;IAClD,YAAY,CAAwB;IAEpC,IAAI,CAAiC;IACrC,MAAM,CAAiC;IACvC,WAAW,CAAe;IAE1B,UAAU,CAAmB;IAE7B,YAAY,GAA4B,IAAI,CAAA;IAC5C,SAAS,CAAQ;IACjB,OAAO,GAAgC,IAAI,CAAA;IAE3C,UAAU,GAAG,CAAC,GAAU,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC,CAAA;IAED,YACE,QAAgB,EAChB,aAAkD,EAClD,WAAoC,EACpC,IAAsB;QAEtB,KAAK,EAAE,CAAA;QACP,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACvE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,SAAyB,CAAC,CAAA;QAExE,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;YACnE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,CAAC,CAAC,GAAG,IAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAEzE,IAAI,OAAO,IAAI,EAAE,GAAG,KAAK,QAAQ,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAA;YAChD,IAAI,CAAC,IAAI,GAAG,CAAC,IAAO,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,CAAA;QAC5C,CAAC;aAAM,IAAI,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAA;YACpD,IAAI,CAAC,MAAM,GAAG,CAAC,IAAO,EAAE,IAAY,EAAE,EAAE,CAAC,KAAK,CAAA;QAChD,CAAC;aAAM,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;QACxE,CAAC;QAED,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1E,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC3E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,uBAAuB,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAC7F,CAAC;QAED,IAAI,IAAI,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBACpE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpD,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;YAChE,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtD,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,UAAU,IAAI,iBAAiB,CAAA;QAExD,IAAI,CAAC,OAAO;YACV,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAExF,IAAI,IAAI,EAAE,QAAQ,KAAK,KAAK,IAAI,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC;gBACH,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;gBAChE,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAA;oBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,aAAa,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,EAAE;4BAC7D,GAAG,IAAI,EAAE,QAAQ;4BACjB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;yBAC3E,CAAC,CACH,CAAA;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;gBACzB,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEb,UAAU,CAAC,WAAW,KAAK,EAAE,CAAA;QAC7B,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,KAAK;QACP,IAAI,QAAoE,CAAA;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,IAAI,GAAuB,CAAC,CAAA;YAChC,IAAI,CAAC;gBACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,cAAe,CAAC,GAAG,EAA4B,CAAA;oBAC5E,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,aAAc,CAAC,GAAG,EAA2B,CAAA;oBACzE,IAAI,IAAI,UAAU,GAAG,SAAS,CAAA;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,SAAS,CAAA;gBAChB,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;YAC/B,CAAC;YACD,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAA;QAC/C,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK;YAC3B,QAAQ;SACT,CAAA;IACH,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACjC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAA;YACpB,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEhB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QACzB,CAAC;QAED,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3F,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAClF,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAG,IAAO;QACZ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI,CAAC,GAAG,IAAO;QACb,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,IAAO;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAA;QACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE5B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;gBACtD,qEAAqE;gBACrE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;gBACtC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,CAAC,GAAG,IAAO;QACf,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAA;QACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;QACvD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAA;YAClD,IAAI,CAAC;gBACH,IAAI,CAAC;oBACH,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;gBACxC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;gBAC/B,CAAC;gBACD,IAAI,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAA;gBACzD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;gBAC/B,CAAC;gBACD,IAAI,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBACzC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;gBACxE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAID,KAAK,CAAC,IAAO,EAAE,OAAgB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAA;QAEtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE5B,IAAI,MAAM,GAA8B,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAE9D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC5E,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAA4B,CAAA;gBACrE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;oBACrC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBAC7B,MAAM,GAAG,KAAK,CAAA;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;gBACrB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;YAC9C,CAAC;YAED,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxB,0DAA0D;gBAC1D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;gBACzB,MAAM,GAAG,SAAS,CAAA;YACpB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,yEAAyE;YACzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QAC/C,CAAC;QAED,CAAC;YACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACxC,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrF,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBACd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;oBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAClB,OAAO,MAAM,CAAA;oBACf,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BACzB,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;wBAC/B,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;YAC/B,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/D,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,MAAK;YACP,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YAE1E,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC;iBACtD,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,QAAQ,CACN,IAAO,EACP,GAAW,EACX,OAAe,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QAE9B,IAAI,KAAyB,CAAA;QAC7B,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACnB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YAC7B,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QAChC,CAAC;QAED,2EAA2E;QAC3E,4EAA4E;QAC5E,iEAAiE;QACjE,MAAM,OAAO,GAAe,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CACrD,CAAC,KAAK,EAAE,EAAE;YACR,qEAAqE;YACrE,oEAAoE;YACpE,gDAAgD;YAChD,IAAI,CAAC;gBACH,qEAAqE;gBACrE,+DAA+D;gBAC/D,+DAA+D;gBAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;oBACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;YAED,MAAM,GAAG,CAAA;QACX,CAAC,CACF,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAE9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,KAAoB,EAAE,OAAe,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACpE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;QACvD,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAE5E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,uCAAuC;YACvC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;gBAClE,IAAI,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC1B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAA;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAA;QAC9E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAA;QAC1B,MAAM,KAAK,GAAG,GAAG,GAAG,UAAU,CAAA;QAE9B,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAC7B,GAAG,EACH,KAAK,EACL,GAAG,EACH,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAC7D,CAAA;QACD,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAA;YACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACjC,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,GAAG,GAAG,EAAE;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YAC5C,IAAI,CAAC;gBACH,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;oBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnD,MAAK;oBACP,CAAC;oBAED,IAAI,CAAC,GAAG,CAAC,CAAA;oBACT,IAAI,CAAC;wBACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBAC5B,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;4BACjC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;4BAErD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gCACjB,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;4BAC5C,CAAC;iCAAM,CAAC;gCACN,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;4BAC1B,CAAC;wBACH,CAAC;wBACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;wBAC7B,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC3B,MAAK;oBACP,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,sEAAsE;wBACtE,8DAA8D;wBAC9D,sEAAsE;wBACtE,8EAA8E;wBAC9E,IAAI,CAAC;4BACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;wBACjC,CAAC;wBAAC,MAAM,CAAC;4BACP,oCAAoC;4BACpC,oGAAoG;wBACtG,CAAC;wBAED,IACG,GAA4B,EAAE,OAAO,KAAK,EAAE,CAAC,iBAAiB;4BAC/D,UAAU,GAAG,CAAC;4BACd,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,CAAC;4BACD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;wBAC3B,CAAC;6BAAM,CAAC;4BACN,qEAAqE;4BACrE,sEAAsE;4BACtE,wEAAwE;4BACxE,wEAAwE;4BACxE,gEAAgE;4BAChE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC3B,MAAM,GAAG,CAAA;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;gBACzB,IAAI,CAAC,UAAU,CAAC,GAAY,CAAC,CAAA;YAC/B,CAAC;YAED,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IACxB,CAAC,CAAA;IAED,YAAY,CACV,GAAW,EACX,KAAQ,EACR,GAAW,EACX,KAAa,EACb,IAAY;QAEZ,OAAO;YACL,GAAG;YACH,KAAK;YACL,KAAK;YACL,GAAG;YACH,IAAI;YACJ,KAAK,EAAE,CAAC,CAAC;YACT,OAAO,EAAE,CAAC,CAAC;SACZ,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,GAAgB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,OAAO,IAAI,CAAC,YAAY,CACtB,GAAG,EACH,KAAK,EACL,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,KAAK,EACT,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CACtE,CAAA;IACH,CAAC;CACF;AAED,CAAC;IACC,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAA;IACrD,SAAS,CAAC,KAAK,EAAE,CAAA;IACjB,SAAS,CAAC,SAAS,GAAG,GAAG,EAAE;QACzB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,EAAE,CAAA;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,WAAW,CAAC,GAAY,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/memory.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ export interface MemoryOptions {
|
|
|
3
3
|
maxCount?: number;
|
|
4
4
|
}
|
|
5
5
|
export interface MemoryCacheEntry<V> {
|
|
6
|
-
ttl: number;
|
|
7
6
|
stale: number;
|
|
7
|
+
expire: number;
|
|
8
8
|
value: V;
|
|
9
9
|
key: string;
|
|
10
10
|
index: number;
|
|
@@ -19,7 +19,7 @@ export declare class MemoryCache<V> {
|
|
|
19
19
|
uncork(): void;
|
|
20
20
|
get(key: string): MemoryCacheEntry<V> | undefined;
|
|
21
21
|
delete(key: string): void;
|
|
22
|
-
|
|
22
|
+
gc(now: number): void;
|
|
23
23
|
get stats(): {
|
|
24
24
|
size: number;
|
|
25
25
|
maxSize: number;
|
package/lib/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,CAAC,CAAA;IACR,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,WAAW,CAAC,CAAC;;gBAaZ,IAAI,CAAC,EAAE,aAAa;IAahC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAiB3C,IAAI;IAIJ,MAAM;IASN,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,MAAM,CAAC,GAAG,EAAE,MAAM;IA+BlB,EAAE,CAAC,GAAG,EAAE,MAAM;IASd,IAAI,KAAK;;;;;MAOR;CAcF"}
|
package/lib/memory.js
CHANGED
|
@@ -74,10 +74,10 @@ export class MemoryCache {
|
|
|
74
74
|
this.#arr[entry.index].index = entry.index;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
gc(now) {
|
|
78
78
|
for (let i = this.#arr.length - 1; i >= 0; i--) {
|
|
79
79
|
const entry = this.#arr[i];
|
|
80
|
-
if (now >= entry.
|
|
80
|
+
if (now >= entry.expire) {
|
|
81
81
|
this.#delete(entry);
|
|
82
82
|
}
|
|
83
83
|
}
|
package/lib/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxtedition/cache",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"tsd": "^0.33.0",
|
|
33
33
|
"typescript": "^5.9.3"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "659fb9c4fdf109e4d7fdcd23d7da1c1ddf6e3157"
|
|
36
36
|
}
|