@nxtedition/cache 2.1.14 → 2.1.15

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 CHANGED
@@ -5,6 +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. ~40% higher throughput under multi-thread write contention (see [Benchmarks](#benchmarks)).
8
9
  - **Stale-while-revalidate** — Serve stale data synchronously while refreshing in the background
9
10
  - **Request coalescing** — Concurrent fetches for the same key share a single in-flight `Promise`
10
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`
@@ -87,10 +88,11 @@ The in-memory tier uses a random-two-choice eviction strategy: when the cache is
87
88
 
88
89
  #### `DatabaseOptions`
89
90
 
90
- | Option | Type | Default | Description |
91
- | --------- | -------- | ---------------------------- | ----------------------------------------------------------------- |
92
- | `timeout` | `number` | `20` | SQLite busy timeout in milliseconds. |
93
- | `maxSize` | `number` | `128 * 1024 * 1024` (128 MB) | Maximum database file size. Oldest entries are evicted when full. |
91
+ | Option | Type | Default | Description |
92
+ | --------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
93
+ | `timeout` | `number` | `20` | SQLite busy timeout in milliseconds. |
94
+ | `maxSize` | `number` | `128 * 1024 * 1024` (128 MB) | Maximum total database size across all shards. Divided evenly per shard. Oldest entries are evicted when a shard is full. |
95
+ | `shards` | `number` | `4` | Number of SQLite files (shards) the cache is spread across. See [File Sharding](#file-sharding). Use `1` for single-file. |
94
96
 
95
97
  #### `Serializer<V>`
96
98
 
@@ -183,10 +185,10 @@ Once the stale window expires, the entry is purged entirely and the next `get()`
183
185
 
184
186
  ```
185
187
  |--- ttl ---|--- stale ---|
186
- fresh stale expired
187
- ↓ ↓
188
- sync hit sync hit async miss
189
- + bg refresh
188
+ fresh stale expired
189
+ ↓ ↓
190
+ sync hit sync hit async miss
191
+ + bg refresh
190
192
  ```
191
193
 
192
194
  ## Cross-Thread Locking
@@ -213,11 +215,32 @@ There is **no cross-process coordination** — two separate Node processes point
213
215
 
214
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.
215
217
 
218
+ ## File Sharding
219
+
220
+ 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.
221
+
222
+ **On-disk layout:**
223
+
224
+ | `shards` | Files |
225
+ | ----------- | -------------------------------------------------------------------- |
226
+ | `1` | `<location>` (single file, legacy layout — compatible with `stat()`) |
227
+ | `N` (N ≥ 2) | `<location>.0`, `<location>.1`, …, `<location>.{N-1}` |
228
+
229
+ With `shards: 1` the cache is a single file at the given `location`, identical to the pre-sharding layout — useful for backup scripts or observability tools that expect one file.
230
+
231
+ **Cross-instance consistency:** hash routing is deterministic (xxhash32 is pure), so two Cache instances pointing at the same `location` with the same `shards` count will route the same keys to the same shards. Data persists across instance restarts.
232
+
233
+ **Changing `shards` invalidates data.** If you open a cache with `shards: 2` after previously using `shards: 4`, keys hash-route to different shard files than they were written to. The old data is still on disk but effectively unreachable until you open with the original shard count.
234
+
235
+ **Per-shard state:** `maxSize` divides evenly across shards (`maxSize / shards` per shard), eviction runs per-shard on `SQLITE_FULL`, and `stats.database.size` is summed across all shards.
236
+
216
237
  ## Batched Writes
217
238
 
218
- SQLite writes are batched using `setImmediate` — multiple `set()` calls within the same microtask turn are coalesced into a single `BEGIN`/`COMMIT` transaction. While a write batch is pending, the in-memory cache is corked (eviction deferred) to avoid dropping entries before they reach disk. If a batch exceeds 512 items, it is flushed immediately.
239
+ SQLite writes are batched using `setImmediate` — multiple `set()` calls within the same microtask turn are coalesced into a single `BEGIN`/`COMMIT` transaction per shard. While a write batch is pending, the in-memory cache is corked (eviction deferred) to avoid dropping entries before they reach disk. If a per-shard batch exceeds 512 items, it is flushed immediately.
240
+
241
+ Flushes iterate shards starting at a random index on each call, so no single shard is starved when the 10 ms per-flush time budget is exhausted mid-pass — the next flush picks a different starting shard.
219
242
 
220
- If the database is full (`SQLITE_FULL`), the cache evicts the 256 oldest entries and retries up to 3 times. On other errors, the rolled-back items are dropped from the batch and the error is emitted.
243
+ If a shard's database is full (`SQLITE_FULL`), the cache evicts the 256 oldest entries in that shard and retries up to 3 times. On other errors, the entire pending batch for that shard is dropped (items remain in the in-memory cache until natural eviction/TTL) and the error is emitted — this prevents error floods when the underlying failure is persistent (e.g. a read-only DB).
221
244
 
222
245
  ## Error Handling
223
246
 
@@ -227,6 +250,65 @@ If the database is full (`SQLITE_FULL`), the cache evicts the 256 oldest entries
227
250
 
228
251
  All cache instances listen on the `nxt:offPeak` `BroadcastChannel`. When a message is received, `purgeStale()` is called on every active instance, enabling coordinated cleanup during low-traffic periods.
229
252
 
253
+ ## Benchmarks
254
+
255
+ Measured on Apple M3 Pro (12 CPUs), Node 25.6.1. Throughput is `ops/sec`; latency is `ns` (median).
256
+
257
+ ### Single-thread hot paths
258
+
259
+ | Operation | ops/sec | p50 | p99 |
260
+ | ------------------------------------------- | ------- | ------ | ------ |
261
+ | `get()` memory hit (sequential keys) | 6.87 M | 125 ns | 333 ns |
262
+ | `get()` memory hit (random keys) | 7.09 M | 125 ns | 250 ns |
263
+ | `peek()` memory hit | 5.74 M | 125 ns | 625 ns |
264
+ | `get()` memory miss, DB hit (sequential) | 386 K | 2.3 µs | 6.9 µs |
265
+ | `get()` memory miss, DB hit (random) | 345 K | 2.3 µs | 9.4 µs |
266
+ | `get()` cold (sync `valueSelector`) | 284 K | 2.0 µs | 3.4 µs |
267
+ | `get()` memory-only hit (no DB) | 8.37 M | 125 ns | 209 ns |
268
+ | `get()` memory-only cold (no DB) | 1.73 M | 500 ns | 1.1 µs |
269
+ | `get()` eviction pressure (`maxCount=1000`) | 1.43 M | 583 ns | 1.8 µs |
270
+ | `delete()` existing keys | 73 K | 12 µs | 32 µs |
271
+ | `purgeStale()` 10 K expired entries | 7.4 ms | — | — |
272
+
273
+ ### Shard-count comparison
274
+
275
+ Single-thread overhead of sharding on the hot paths is ≤1 % in either direction. The pay-off is under multi-thread write contention:
276
+
277
+ **4 threads, partitioned cold writes** (each worker writes unique keys, stressing concurrent writers):
278
+
279
+ | `shards` | Aggregate throughput | Scaling vs. 1 thread | Δ vs. `shards: 1` |
280
+ | -------- | -------------------- | -------------------- | ----------------- |
281
+ | 1 | 383 K ops/s | 1.47× | baseline |
282
+ | 2 | 491 K ops/s | 1.85× | **+28 %** |
283
+ | 4 | 551 K ops/s | 2.15× | **+44 %** |
284
+
285
+ **4 threads, shared-keys hot-hit** (mostly memory-resident; sharding shouldn't help much here):
286
+
287
+ | `shards` | Aggregate throughput |
288
+ | -------- | -------------------- |
289
+ | 1 | 25.3 M ops/s |
290
+ | 2 | 24.5 M ops/s |
291
+ | 4 | 24.6 M ops/s |
292
+
293
+ 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
+
295
+ ### Lock option overhead (single-thread)
296
+
297
+ | Path | lock enabled | lock disabled |
298
+ | --------------------------------- | ------------ | ------------- |
299
+ | `get()` cold (sync valueSelector) | 361 K ops/s | 388 K ops/s |
300
+ | `get()` memory hit | 9.23 M ops/s | 8.93 M ops/s |
301
+
302
+ Cross-thread SAB locking adds ~7 % on the cold path and is negligible (or slightly faster) on memory hits. It is worth leaving on unless the workload is strictly single-threaded or partitioned across workers.
303
+
304
+ ### Reproducing
305
+
306
+ ```sh
307
+ yarn build
308
+ node scripts/bench.mjs # full bench suite
309
+ node scripts/bench-shards.mjs # shard-count comparison (1, 2, 4 shards)
310
+ ```
311
+
230
312
  ## Scripts
231
313
 
232
314
  ```sh
package/lib/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import { type MemoryOptions } from './memory.ts';
3
3
  export type { MemoryOptions } from './memory.ts';
4
4
  export interface DatabaseOptions {
5
5
  timeout?: number;
6
+ shards?: number;
6
7
  maxSize?: number;
7
8
  }
8
9
  export interface Serializer<V> {
@@ -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;AA2BhD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AACD,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;AAMD,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAE,SAAQ,YAAY;;gBAoChF,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;IAoIxB,IAAI,KAAK;;;;;;;;;;;sBACmB,MAAM;kBAAQ,MAAM,GAAG,SAAS;;MAkB3D;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;IAIhB,KAAK,IAAI,IAAI;IA2Bb,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;IA4BnC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI;IAOxB,UAAU,IAAI,IAAI;CA+VnB;AAoBD,uCAAuC;AACvC,eAAO,MAAM,UAAU,cAAQ,CAAA;AAC/B,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,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;AA2BhD,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;AAyFD,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAE,SAAQ,YAAY;;gBA2BhF,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;IA+FxB,IAAI,KAAK;;;;;;;;;;;sBACmB,MAAM;kBAAQ,MAAM,GAAG,SAAS;;MAqB3D;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;IAIhB,KAAK,IAAI,IAAI;IAsBb,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;IA0BnC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI;IAYxB,UAAU,IAAI,IAAI;CAgXnB;AAoBD,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
@@ -26,6 +26,73 @@ const defaultSerializer = {
26
26
  const VERSION = 5;
27
27
  const MAX_DURATION = 365000000e3;
28
28
  const HASHER = await xxhash();
29
+ class DatabaseShard {
30
+ location;
31
+ databaseTimeout = 20;
32
+ database = null;
33
+ getQuery = null;
34
+ delQuery = null;
35
+ purgeStaleQuery = null;
36
+ evictQuery = null;
37
+ pageCountQuery = null;
38
+ pageSizeQuery = null;
39
+ setQuery = null;
40
+ setBatch = [];
41
+ constructor(location, opts) {
42
+ this.location = location;
43
+ for (let n = 0; true; n++) {
44
+ try {
45
+ const maxSize = opts?.maxSize ?? 128 * 1024 * 1024;
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');
73
+ break;
74
+ }
75
+ catch (err) {
76
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
77
+ if (n >= 16) {
78
+ this[Symbol.dispose]();
79
+ throw err;
80
+ }
81
+ }
82
+ }
83
+ }
84
+ [Symbol.dispose]() {
85
+ this.getQuery = null;
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;
94
+ }
95
+ }
29
96
  export class Cache extends EventEmitter {
30
97
  #memory;
31
98
  #dedupe = new Map();
@@ -38,16 +105,7 @@ export class Cache extends EventEmitter {
38
105
  #lockArray;
39
106
  #flushHandle = null;
40
107
  #location;
41
- #databaseTimeout = 20;
42
- #database = null;
43
- #getQuery = null;
44
- #delQuery = null;
45
- #purgeStaleQuery = null;
46
- #evictQuery = null;
47
- #pageCountQuery = null;
48
- #pageSizeQuery = null;
49
- #setQuery = null;
50
- #setBatch = [];
108
+ #shards = null;
51
109
  #emitError = (err) => {
52
110
  if (this.listenerCount('error') > 0) {
53
111
  this.emit('error', err);
@@ -113,53 +171,31 @@ export class Cache extends EventEmitter {
113
171
  this.#serializer = opts?.serializer ?? defaultSerializer;
114
172
  this.#memory =
115
173
  opts?.memory === false || opts?.memory === null ? null : new MemoryCache(opts?.memory);
116
- for (let n = 0; opts?.database !== null && opts?.database !== false; n++) {
174
+ if (opts?.database === false || opts?.database === null) {
175
+ this.#shards = null;
176
+ }
177
+ else {
178
+ this.#shards = [];
117
179
  try {
118
- const maxSize = opts?.database?.maxSize ?? 128 * 1024 * 1024;
119
- this.#databaseTimeout = opts?.database?.timeout ?? 20;
120
- this.#database ??= new DatabaseSync(location, { timeout: this.#databaseTimeout });
121
- this.#database.exec(`
122
- PRAGMA journal_mode = WAL;
123
- PRAGMA synchronous = OFF;
124
- PRAGMA wal_autocheckpoint = 10000;
125
- PRAGMA cache_size = -${Math.ceil(maxSize / 1024 / 8)};
126
- PRAGMA mmap_size = ${maxSize};
127
- PRAGMA max_page_count = ${Math.ceil(maxSize / 4096)};
128
- PRAGMA optimize;
129
-
130
- CREATE TABLE IF NOT EXISTS cache_v${VERSION} (
131
- key TEXT PRIMARY KEY NOT NULL,
132
- val BLOB NOT NULL,
133
- ttl INTEGER NOT NULL,
134
- stale INTEGER NOT NULL
135
- ) WITHOUT ROWID;
136
-
137
- CREATE INDEX IF NOT EXISTS cache_v${VERSION}_stale_idx ON cache_v${VERSION}(stale);
138
- `);
139
- this.#getQuery = this.#database.prepare(`SELECT val, ttl, stale FROM cache_v${VERSION} WHERE key = ? AND stale > ?`);
140
- this.#setQuery = this.#database.prepare(`INSERT OR REPLACE INTO cache_v${VERSION} (key, val, ttl, stale) VALUES (?, ?, ?, ?)`);
141
- this.#delQuery = this.#database.prepare(`DELETE FROM cache_v${VERSION} WHERE key = ?`);
142
- this.#purgeStaleQuery = this.#database.prepare(`DELETE FROM cache_v${VERSION} WHERE stale <= ?`);
143
- this.#evictQuery = this.#database.prepare(`DELETE FROM cache_v${VERSION} WHERE key IN (SELECT key FROM cache_v${VERSION} ORDER BY stale ASC LIMIT ?)`);
144
- this.#pageCountQuery = this.#database.prepare('PRAGMA page_count');
145
- this.#pageSizeQuery = this.#database.prepare('PRAGMA page_size');
146
- break;
180
+ if (location === ':memory:') {
181
+ this.#shards.push(new DatabaseShard(location, opts?.database));
182
+ }
183
+ else {
184
+ const count = opts?.database?.shards ?? 4;
185
+ for (let n = 0; n < count; n++) {
186
+ this.#shards.push(new DatabaseShard(count === 1 ? location : location + '.' + n, {
187
+ ...opts?.database,
188
+ maxSize: Math.ceil((opts?.database?.maxSize ?? 128 * 1024 * 1024) / count),
189
+ }));
190
+ }
191
+ }
147
192
  }
148
193
  catch (err) {
149
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
150
- if (n >= 16) {
151
- this.#database?.close();
152
- this.#database = null;
153
- this.#getQuery = null;
154
- this.#setQuery = null;
155
- this.#delQuery = null;
156
- this.#purgeStaleQuery = null;
157
- this.#evictQuery = null;
158
- this.#pageCountQuery = null;
159
- this.#pageSizeQuery = null;
160
- this.#emitError(err);
161
- break;
194
+ for (const shard of this.#shards) {
195
+ shard[Symbol.dispose]();
162
196
  }
197
+ this.#shards = null;
198
+ this.#emitError(err);
163
199
  }
164
200
  }
165
201
  dbs.add(this);
@@ -168,14 +204,17 @@ export class Cache extends EventEmitter {
168
204
  }
169
205
  get stats() {
170
206
  let database;
171
- if (this.#database) {
172
- let size;
207
+ if (this.#shards) {
208
+ let size = 0;
173
209
  try {
174
- const { page_count } = this.#pageCountQuery.get();
175
- const { page_size } = this.#pageSizeQuery.get();
176
- size = page_count * page_size;
210
+ for (const shard of this.#shards) {
211
+ const { page_count } = shard.pageCountQuery.get();
212
+ const { page_size } = shard.pageSizeQuery.get();
213
+ size += page_count * page_size;
214
+ }
177
215
  }
178
216
  catch (err) {
217
+ size = undefined;
179
218
  this.#emitError(err);
180
219
  }
181
220
  database = { location: this.#location, size };
@@ -192,20 +231,15 @@ export class Cache extends EventEmitter {
192
231
  close() {
193
232
  while (this.#flushHandle) {
194
233
  clearImmediate(this.#flushHandle);
234
+ this.#memory?.cork();
195
235
  this.#flush();
196
236
  }
197
237
  this.#closed = true;
198
238
  this.#dedupe.clear();
199
239
  dbs.delete(this);
200
- this.#getQuery = null;
201
- this.#setQuery = null;
202
- this.#delQuery = null;
203
- this.#purgeStaleQuery = null;
204
- this.#evictQuery = null;
205
- this.#pageCountQuery = null;
206
- this.#pageSizeQuery = null;
207
- this.#database?.close();
208
- this.#database = null;
240
+ for (const shard of this.#shards ?? []) {
241
+ shard[Symbol.dispose]();
242
+ }
209
243
  globalThis.__nxt_cache = globalThis.__nxt_cache?.filter((ref) => ref.deref() != null) ?? [];
210
244
  const idx = globalThis.__nxt_cache?.findIndex((ref) => ref.deref() === this) ?? -1;
211
245
  if (idx !== -1) {
@@ -232,62 +266,64 @@ export class Cache extends EventEmitter {
232
266
  if (typeof key !== 'string' || key.length === 0) {
233
267
  throw new TypeError('keySelector must return a non-empty string');
234
268
  }
235
- let idx;
269
+ const hash = HASHER.h32(key);
236
270
  if (this.#lockArray) {
237
- idx = HASHER.h32(key) % this.#lockArray.length;
271
+ const idx = hash % this.#lockArray.length;
238
272
  if (Atomics.add(this.#lockArray, idx, 1) >= 0xfffffff) {
239
273
  // Roll back the increment before throwing so we don't leak the slot.
240
- // #refresh would normally own the decrement, but we're bailing before
241
- // calling it.
242
274
  if (Atomics.sub(this.#lockArray, idx, 1) === 1) {
243
275
  Atomics.notify(this.#lockArray, idx);
244
276
  }
245
277
  throw new Error('lock counter overflow');
246
278
  }
247
279
  }
248
- else {
249
- idx = -1;
250
- }
251
- return this.#refresh(args, key, idx);
280
+ return this.#refresh(args, key, hash);
252
281
  }
253
282
  delete(...args) {
254
283
  if (this.#closed) {
255
284
  throw new Error('cache is closed');
256
285
  }
257
- this.#set(this.#keySelector(...args), undefined);
286
+ const key = this.#keySelector(...args);
287
+ if (typeof key !== 'string' || key.length === 0) {
288
+ throw new TypeError('key must be a non-empty string');
289
+ }
290
+ const hash = HASHER.h32(key);
291
+ this.#set(key, undefined, hash);
258
292
  }
259
293
  purgeStale() {
260
294
  if (this.#closed) {
261
295
  throw new Error('cache is closed');
262
296
  }
263
297
  this.#memory?.purgeStale(Date.now());
264
- this.#database?.exec('PRAGMA busy_timeout = 5000');
265
- try {
266
- try {
267
- this.#purgeStaleQuery?.run(Date.now());
268
- }
269
- catch (err) {
270
- this.#emitError(err);
271
- }
272
- try {
273
- this.#database?.exec('PRAGMA wal_checkpoint(TRUNCATE)');
274
- }
275
- catch (err) {
276
- this.#emitError(err);
277
- }
298
+ for (const shard of this.#shards ?? []) {
299
+ shard.database?.exec('PRAGMA busy_timeout = 5000');
278
300
  try {
279
- this.#database?.exec('PRAGMA optimize');
280
- }
281
- catch (err) {
282
- this.#emitError(err);
283
- }
284
- }
285
- finally {
286
- try {
287
- this.#database?.exec(`PRAGMA busy_timeout = ${this.#databaseTimeout}`);
301
+ try {
302
+ shard.purgeStaleQuery?.run(Date.now());
303
+ }
304
+ catch (err) {
305
+ this.#emitError(err);
306
+ }
307
+ try {
308
+ shard.database?.exec('PRAGMA wal_checkpoint(TRUNCATE)');
309
+ }
310
+ catch (err) {
311
+ this.#emitError(err);
312
+ }
313
+ try {
314
+ shard.database?.exec('PRAGMA optimize');
315
+ }
316
+ catch (err) {
317
+ this.#emitError(err);
318
+ }
288
319
  }
289
- catch (err) {
290
- this.#emitError(err);
320
+ finally {
321
+ try {
322
+ shard.database?.exec(`PRAGMA busy_timeout = ${shard.databaseTimeout}`);
323
+ }
324
+ catch (err) {
325
+ this.#emitError(err);
326
+ }
291
327
  }
292
328
  }
293
329
  }
@@ -297,10 +333,12 @@ export class Cache extends EventEmitter {
297
333
  throw new TypeError('keySelector must return a non-empty string');
298
334
  }
299
335
  const now = Date.now();
336
+ const hash = HASHER.h32(key);
300
337
  let cached = this.#memory?.get(key);
301
338
  if (cached === undefined) {
302
339
  try {
303
- const row = this.#getQuery?.get(key, now);
340
+ const shard = this.#shards ? this.#shards[hash % this.#shards.length] : null;
341
+ const row = shard?.getQuery?.get(key, now);
304
342
  if (row !== undefined) {
305
343
  const entry = this.#loadRow(key, row);
306
344
  this.#memory?.set(key, entry);
@@ -331,12 +369,12 @@ export class Cache extends EventEmitter {
331
369
  return { async: true, value: pending };
332
370
  }
333
371
  }
334
- const idx = this.#lockArray ? HASHER.h32(key) % this.#lockArray.length : -1;
372
+ const idx = this.#lockArray ? hash % this.#lockArray.length : -1;
335
373
  if (cached !== undefined) {
336
374
  try {
337
375
  const val = this.#lockArray ? Atomics.compareExchange(this.#lockArray, idx, 0, 1) : 0;
338
376
  if (val === 0) {
339
- const result = this.#refresh(args, key, idx);
377
+ const result = this.#refresh(args, key, hash);
340
378
  if (!result.async) {
341
379
  return result;
342
380
  }
@@ -365,27 +403,32 @@ export class Cache extends EventEmitter {
365
403
  };
366
404
  }
367
405
  }
368
- return this.#refresh(args, key, idx);
406
+ return this.#refresh(args, key, hash);
407
+ }
408
+ #release(hash) {
409
+ if (!this.#lockArray) {
410
+ return;
411
+ }
412
+ const idx = hash % this.#lockArray.length;
413
+ if (Atomics.sub(this.#lockArray, idx, 1) === 1) {
414
+ Atomics.notify(this.#lockArray, idx);
415
+ }
369
416
  }
370
- #refresh(args, key, idx) {
417
+ #refresh(args, key, hash = HASHER.h32(key)) {
371
418
  let value;
372
419
  try {
373
420
  value = this.#valueSelector(...args);
374
421
  }
375
422
  catch (err) {
376
- if (this.#lockArray && Atomics.sub(this.#lockArray, idx, 1) === 1) {
377
- Atomics.notify(this.#lockArray, idx);
378
- }
423
+ this.#release(hash);
379
424
  throw err;
380
425
  }
381
426
  if (!isThenable(value)) {
382
427
  try {
383
- this.#set(key, value);
428
+ this.#set(key, value, hash);
384
429
  }
385
430
  finally {
386
- if (this.#lockArray && Atomics.sub(this.#lockArray, idx, 1) === 1) {
387
- Atomics.notify(this.#lockArray, idx);
388
- }
431
+ this.#release(hash);
389
432
  }
390
433
  return { async: false, value };
391
434
  }
@@ -401,13 +444,11 @@ export class Cache extends EventEmitter {
401
444
  // entry, skip the write so we don't resurrect a deleted key or
402
445
  // overwrite a newer value. #set itself clears dedupe on entry.
403
446
  if (this.#dedupe.get(key) === promise) {
404
- this.#set(key, value);
447
+ this.#set(key, value, hash);
405
448
  }
406
449
  }
407
450
  finally {
408
- if (this.#lockArray && Atomics.sub(this.#lockArray, idx, 1) === 1) {
409
- Atomics.notify(this.#lockArray, idx);
410
- }
451
+ this.#release(hash);
411
452
  }
412
453
  return value;
413
454
  }, (err) => {
@@ -417,16 +458,14 @@ export class Cache extends EventEmitter {
417
458
  }
418
459
  }
419
460
  finally {
420
- if (this.#lockArray && Atomics.sub(this.#lockArray, idx, 1) === 1) {
421
- Atomics.notify(this.#lockArray, idx);
422
- }
461
+ this.#release(hash);
423
462
  }
424
463
  throw err;
425
464
  });
426
465
  this.#dedupe.set(key, promise);
427
466
  return { async: true, value: promise };
428
467
  }
429
- #set(key, value) {
468
+ #set(key, value, hash = HASHER.h32(key)) {
430
469
  if (typeof key !== 'string' || key.length === 0) {
431
470
  throw new TypeError('key must be a non-empty string');
432
471
  }
@@ -434,15 +473,18 @@ export class Cache extends EventEmitter {
434
473
  // this call cannot resurrect a deleted key or overwrite a newer value —
435
474
  // the async path's onFulfilled identity-checks before calling #set.
436
475
  this.#dedupe.delete(key);
476
+ const shard = this.#shards ? this.#shards[hash % this.#shards.length] : null;
437
477
  if (value === undefined) {
438
478
  // Slow path... Should not be common...
439
479
  this.#memory?.delete(key);
440
- this.#setBatch = this.#setBatch.filter((item) => item.key !== key);
441
- try {
442
- this.#delQuery?.run(key);
443
- }
444
- catch (err) {
445
- this.#emitError(err);
480
+ if (shard) {
481
+ shard.setBatch = shard.setBatch.filter((item) => item.key !== key);
482
+ try {
483
+ shard.delQuery?.run(key);
484
+ }
485
+ catch (err) {
486
+ this.#emitError(err);
487
+ }
446
488
  }
447
489
  return;
448
490
  }
@@ -463,84 +505,86 @@ export class Cache extends EventEmitter {
463
505
  const data = this.#serializer.serialize(value);
464
506
  const entry = this.#createEntry(key, value, ttl, stale, ArrayBuffer.isView(data) ? data.byteLength : data.length * 2);
465
507
  this.#memory?.set(key, entry);
508
+ if (!shard) {
509
+ return;
510
+ }
466
511
  if (!this.#flushHandle) {
467
512
  this.#memory?.cork();
468
513
  this.#flushHandle = setImmediate(this.#flush);
469
514
  }
470
- else if (this.#setBatch.length > 512) {
515
+ else if (shard.setBatch.length > 512) {
471
516
  clearImmediate(this.#flushHandle);
472
517
  this.#flush();
473
518
  }
474
- this.#setBatch.push({ key, data, ttl, stale });
519
+ shard.setBatch.push({ key, data, ttl, stale });
475
520
  }
476
521
  #flush = () => {
477
522
  this.#flushHandle = null;
478
- if (this.#setBatch.length === 0 || this.#closed || this.#database == null) {
479
- this.#setBatch.length = 0;
480
- this.#memory?.uncork();
481
- return;
482
- }
483
- try {
484
- const startTime = performance.now();
485
- for (let retryCount = 0; true; retryCount++) {
486
- let n = 0;
487
- try {
488
- this.#database.exec('BEGIN');
489
- while (n < this.#setBatch.length) {
490
- const { key, data, ttl, stale } = this.#setBatch[n++];
491
- if (data != null) {
492
- this.#setQuery?.run(key, data, ttl, stale);
493
- }
494
- else {
495
- this.#delQuery?.run(key);
496
- }
497
- if ((n & 0xf) === 0 && performance.now() - startTime > 10) {
498
- break;
499
- }
523
+ const startTime = performance.now();
524
+ const len = this.#shards?.length ?? 0;
525
+ const idx = Math.floor(Math.random() * len);
526
+ for (let k = 0; k < len; k++) {
527
+ const shard = this.#shards[(idx + k) % len];
528
+ try {
529
+ for (let retryCount = 0; true; retryCount++) {
530
+ if (!shard.database || shard.setBatch.length === 0) {
531
+ break;
500
532
  }
501
- this.#database.exec('COMMIT');
502
- this.#setBatch.splice(0, n);
503
- break;
504
- }
505
- catch (err) {
506
- // ROLLBACK is required: a failed statement leaves the connection with
507
- // an open transaction; without it the next BEGIN would throw.
508
- // On SQLITE_FULL, SQLite automatically rolls back the transaction, so
509
- // the explicit ROLLBACK may fail with "no transaction is active" — ignore it.
533
+ let n = 0;
510
534
  try {
511
- this.#database.exec('ROLLBACK');
512
- }
513
- catch {
514
- // already rolled back automatically
515
- // TODO (fix): Check that the error is what we expect (something like "no transaction is active")...
516
- }
517
- if (err?.errcode === 13 /* SQLITE_FULL */ &&
518
- retryCount < 3 &&
519
- this.#evictQuery != null) {
520
- this.#evictQuery.run(256);
535
+ shard.database.exec('BEGIN');
536
+ while (n < shard.setBatch.length) {
537
+ const { key, data, ttl, stale } = shard.setBatch[n++];
538
+ if (data != null) {
539
+ shard.setQuery?.run(key, data, ttl, stale);
540
+ }
541
+ else {
542
+ shard.delQuery?.run(key);
543
+ }
544
+ }
545
+ shard.database.exec('COMMIT');
546
+ shard.setBatch.splice(0, n);
547
+ break;
521
548
  }
522
- else {
523
- // Intentional: drop the rolled-back items from the batch and surface
524
- // the error via #emitError below. The corresponding entries remain in
525
- // #memory until natural eviction/TTL, which is fine for cache semantics
526
- // callers already accept that cache values can disappear at any time.
527
- // Do NOT flag this as silent data loss (see closed issue #167).
528
- this.#setBatch.splice(0, n);
529
- throw err;
549
+ catch (err) {
550
+ // ROLLBACK is required: a failed statement leaves the connection with
551
+ // an open transaction; without it the next BEGIN would throw.
552
+ // On SQLITE_FULL, SQLite automatically rolls back the transaction, so
553
+ // the explicit ROLLBACK may fail with "no transaction is active" ignore it.
554
+ try {
555
+ shard.database.exec('ROLLBACK');
556
+ }
557
+ catch {
558
+ // already rolled back automatically
559
+ // TODO (fix): Check that the error is what we expect (something like "no transaction is active")...
560
+ }
561
+ if (err?.errcode === 13 /* SQLITE_FULL */ &&
562
+ retryCount < 3 &&
563
+ shard.evictQuery != null) {
564
+ shard.evictQuery.run(256);
565
+ }
566
+ else {
567
+ // Intentional: drop the rolled-back items from the batch and surface
568
+ // the error via #emitError below. The corresponding entries remain in
569
+ // #memory until natural eviction/TTL, which is fine for cache semantics
570
+ // — callers already accept that cache values can disappear at any time.
571
+ // Do NOT flag this as silent data loss (see closed issue #167).
572
+ shard.setBatch.splice(0, n);
573
+ throw err;
574
+ }
530
575
  }
531
576
  }
532
577
  }
578
+ catch (err) {
579
+ shard.setBatch.length = 0;
580
+ this.#emitError(err);
581
+ }
582
+ if (performance.now() - startTime > 10) {
583
+ this.#flushHandle = setImmediate(this.#flush);
584
+ return;
585
+ }
533
586
  }
534
- catch (err) {
535
- this.#emitError(err);
536
- }
537
- if (this.#setBatch.length > 0) {
538
- // If we weren't able to flush the entire batch within the time limit, schedule another flush.
539
- this.#flushHandle = setImmediate(this.#flush);
540
- }
541
- else {
542
- this.#memory?.uncork();
543
- }
587
+ this.#memory?.uncork();
544
588
  };
545
589
  #createEntry(key, value, ttl, stale, size) {
546
590
  return {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,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;;gBAYZ,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;IAoBlB,UAAU,CAAC,GAAG,EAAE,MAAM;IAStB,IAAI,KAAK;;;;;MAOR;CAcF"}
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,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,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,UAAU,CAAC,GAAG,EAAE,MAAM;IAStB,IAAI,KAAK;;;;;MAOR;CAcF"}
package/lib/memory.js CHANGED
@@ -5,6 +5,7 @@ export class MemoryCache {
5
5
  #maxCount;
6
6
  #size = 0;
7
7
  #count = 0;
8
+ #counter = 0;
8
9
  #cork = 0;
9
10
  constructor(opts) {
10
11
  if (opts?.maxSize != null && (!Number.isInteger(opts.maxSize) || opts.maxSize < 1)) {
@@ -24,7 +25,7 @@ export class MemoryCache {
24
25
  this.#map.set(key, entry);
25
26
  entry.key = key;
26
27
  entry.index = this.#arr.push(entry) - 1;
27
- entry.counter = performance.now();
28
+ entry.counter = this.#nextCounter();
28
29
  this.#size += entry.size ?? 0;
29
30
  this.#count += 1;
30
31
  this.#prune();
@@ -43,7 +44,7 @@ export class MemoryCache {
43
44
  get(key) {
44
45
  const entry = this.#map.get(key);
45
46
  if (entry != null) {
46
- entry.counter = performance.now();
47
+ entry.counter = this.#nextCounter();
47
48
  }
48
49
  return entry;
49
50
  }
@@ -53,6 +54,16 @@ export class MemoryCache {
53
54
  this.#delete(entry);
54
55
  }
55
56
  }
57
+ #nextCounter() {
58
+ if (this.#counter === Number.MAX_SAFE_INTEGER) {
59
+ const sorted = [...this.#arr].sort((a, b) => a.counter - b.counter);
60
+ this.#counter = 0;
61
+ for (const e of sorted) {
62
+ e.counter = this.#counter++;
63
+ }
64
+ }
65
+ return this.#counter++;
66
+ }
56
67
  #delete(entry) {
57
68
  this.#map.delete(entry.key);
58
69
  this.#size -= entry.size ?? 0;
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":"AAeA,MAAM,OAAO,WAAW;IACtB,IAAI,GAAqC,IAAI,GAAG,EAAE,CAAA;IAClD,IAAI,GAA+B,EAAE,CAAA;IAErC,QAAQ,CAAA;IACR,SAAS,CAAA;IAET,KAAK,GAAG,CAAC,CAAA;IACT,MAAM,GAAG,CAAC,CAAA;IACV,QAAQ,GAAG,CAAC,CAAA;IAEZ,KAAK,GAAG,CAAC,CAAA;IAET,YAAY,IAAoB;QAC9B,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;QACjD,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAA;IAC9C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAA0B;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACxB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACf,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QAEnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAEhB,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;YACf,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,EAAE,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACrC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;YACnE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,OAAO,CAAC,KAA0B;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG,CAAA;QAC5B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK;QACP,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,QAAQ,EAAE,IAAI,CAAC,SAAS;SACzB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,OAAM;QACR,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5F,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/cache",
3
- "version": "2.1.14",
3
+ "version": "2.1.15",
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": "b8a7b3d8062e9c3c65dda9f1f9030d98267c382b"
35
+ "gitHead": "5c6d79b4a6e0a3684a850151248ac248b712a252"
36
36
  }