cachimbo 0.0.1 → 0.0.2
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 +26 -21
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
<
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img width="200" src="https://raw.githubusercontent.com/Guichaguri/cachimbo/main/docs/assets/cachimbo.png">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">Cachimbo</h1>
|
|
4
6
|
|
|
5
|
-
Cachimbo is
|
|
7
|
+
Cachimbo is an advanced caching library that allows you to layer different strategies in order to maximize the performance.
|
|
6
8
|
|
|
7
9
|
## Features
|
|
8
10
|
|
|
9
11
|
- Supports external cache stores
|
|
10
12
|
- Redis
|
|
13
|
+
- Valkey
|
|
11
14
|
- Memcached
|
|
12
15
|
- Cloudflare Workers KV
|
|
16
|
+
- Keyv
|
|
13
17
|
- Supports in-memory cache stores
|
|
14
|
-
- Least Recently Used (LRU)
|
|
15
|
-
- Time
|
|
16
|
-
-
|
|
18
|
+
- Least Recently Used (LRU) eviction
|
|
19
|
+
- Time-based (TTL) eviction
|
|
20
|
+
- FIFO eviction
|
|
17
21
|
- Supports intermediary cache strategies
|
|
18
22
|
- Request coalescing (deduplication)
|
|
19
23
|
- Multi-layer caching (tiered cache)
|
|
20
24
|
- Stale-While-Revalidate
|
|
25
|
+
- TTL jittering
|
|
21
26
|
- Metrics collection
|
|
22
27
|
- Easily extendable
|
|
23
28
|
|
|
@@ -65,25 +70,25 @@ In-memory caches offer extremely low latency since data is stored directly in th
|
|
|
65
70
|
|
|
66
71
|
External caches (like Redis, Memcached, etc) provide fast, scalable, shared storage that can be accessed across multiple application instances. They offer high throughput, larger memory capacity, and centralized cache management beyond what in-memory caches can reliably provide.
|
|
67
72
|
|
|
68
|
-
- [In-memory](
|
|
69
|
-
- [Redis](docs/stores/redis-valkey.md) (and Valkey)
|
|
70
|
-
- [Memcached](
|
|
71
|
-
- [Cloudflare Workers KV](
|
|
72
|
-
- [Keyv](
|
|
73
|
+
- [In-memory](/docs/stores/in-memory.md)
|
|
74
|
+
- [Redis](/docs/stores/redis-valkey.md) (and Valkey)
|
|
75
|
+
- [Memcached](/docs/stores/memcached.md)
|
|
76
|
+
- [Cloudflare Workers KV](/docs/stores/cloudflare-workers-kv.md)
|
|
77
|
+
- [Keyv](/docs/stores/keyv.md)
|
|
73
78
|
|
|
74
79
|
## Cache Layers
|
|
75
80
|
|
|
76
81
|
These layers work just like "middlewares" but for caches, they customize how a cache is handled.
|
|
77
82
|
|
|
78
|
-
- [Request Coalescing](
|
|
79
|
-
- [Tiered Caching](
|
|
80
|
-
- [Stale-While-Revalidate](
|
|
81
|
-
- [TTL Jittering](
|
|
82
|
-
- [Async/Lazy Initialization](
|
|
83
|
-
- [Key Transformation](
|
|
84
|
-
- [Metrics Collection](
|
|
83
|
+
- [Request Coalescing](/docs/layers/request-coalescing.md) (deduplication)
|
|
84
|
+
- [Tiered Caching](/docs/layers/tiered.md) (multi-layer caching)
|
|
85
|
+
- [Stale-While-Revalidate](/docs/layers/stale-while-revalidate.md)
|
|
86
|
+
- [TTL Jittering](/docs/layers/jittering.md)
|
|
87
|
+
- [Async/Lazy Initialization](/docs/layers/async-lazy.md)
|
|
88
|
+
- [Key Transformation](/docs/layers/key-transformation.md)
|
|
89
|
+
- [Metrics Collection](/docs/layers/metrics-collection.md)
|
|
85
90
|
|
|
86
91
|
## Guides
|
|
87
|
-
- [Choosing the right combination of layers](
|
|
88
|
-
- [Disabling cache](
|
|
89
|
-
- [Extending](
|
|
92
|
+
- [Choosing the right combination of layers](/docs/guides/choosing-layers.md)
|
|
93
|
+
- [Disabling cache](/docs/guides/disabling.md)
|
|
94
|
+
- [Extending](/docs/guides/extending.md)
|
package/dist/index.cjs
CHANGED
|
@@ -132,6 +132,7 @@ var LocalTTLCache = class extends BaseCache {
|
|
|
132
132
|
*
|
|
133
133
|
* It ignores expiration times, but a limit of cached items can be set.
|
|
134
134
|
*
|
|
135
|
+
* It implements a simple FIFO eviction policy:
|
|
135
136
|
* Once the limit of items is reached, the first inserted keys will be purged.
|
|
136
137
|
*/
|
|
137
138
|
var LocalMapCache = class extends BaseCache {
|
package/dist/index.d.cts
CHANGED
|
@@ -220,6 +220,7 @@ interface MapLike<K, V> {
|
|
|
220
220
|
*
|
|
221
221
|
* It ignores expiration times, but a limit of cached items can be set.
|
|
222
222
|
*
|
|
223
|
+
* It implements a simple FIFO eviction policy:
|
|
223
224
|
* Once the limit of items is reached, the first inserted keys will be purged.
|
|
224
225
|
*/
|
|
225
226
|
declare class LocalMapCache extends BaseCache {
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":["Logger","Logger","SetCacheOptions","BaseCacheOptions","ICache","T","Promise","Record"],"sources":["../src/types/logger.d.ts","../src/types/cache.d.ts","../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["\r\nexport interface Logger {\r\n /**\r\n * Sends a debug log\r\n * @param name The cache name\r\n * @param message The log message\r\n */\r\n debug: (name?: string, ...message: any[]) => void;\r\n}\r\n","import type { Logger } from './logger.js';\r\n\r\nexport interface SetCacheOptions {\r\n /**\r\n * Time to Live in seconds\r\n */\r\n ttl?: number;\r\n}\r\n\r\nexport interface BaseCacheOptions {\r\n /**\r\n * The name of this strategy. Used for logging\r\n */\r\n name?: string;\r\n\r\n /**\r\n * A logger that is useful for debugging the cache chain\r\n */\r\n logger?: Logger;\r\n}\r\n\r\nexport interface ICache {\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * Returns `null` when the resource is not found.\r\n *\r\n * @param key The cache key\r\n */\r\n get<T>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * If the cached resource is not found, fetches it by calling the `load` function and then saves it into cache.\r\n *\r\n * @param key The cache key\r\n * @param load The function which should fetch the fresh data from origin\r\n * @param options The options used to save the cache\r\n */\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T>;\r\n\r\n /**\r\n * Writes a resource into cache.\r\n *\r\n * The value **must** be JSON stringifiable.\r\n *\r\n * @param key The cache key\r\n * @param value The resource value\r\n * @param options The options to save the cache\r\n */\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes a cached resource by a key.\r\n *\r\n * @param key The cache key to delete\r\n */\r\n delete(key: string): Promise<void>;\r\n\r\n /**\r\n * Reads cached resources in batch.\r\n *\r\n * @param keys The list of cache keys.\r\n */\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>>;\r\n\r\n /**\r\n * Writes cache resources in batch.\r\n *\r\n * The values **must** be JSON stringifiable.\r\n *\r\n * @param data The cache keys and values\r\n * @param options The options to save the cache\r\n */\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes cached resources by their keys in batch.\r\n *\r\n * @param keys The list of keys to delete\r\n */\r\n deleteMany(keys: string[]): Promise<void>;\r\n\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":["Logger","Logger","SetCacheOptions","BaseCacheOptions","ICache","T","Promise","Record"],"sources":["../src/types/logger.d.ts","../src/types/cache.d.ts","../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["\r\nexport interface Logger {\r\n /**\r\n * Sends a debug log\r\n * @param name The cache name\r\n * @param message The log message\r\n */\r\n debug: (name?: string, ...message: any[]) => void;\r\n}\r\n","import type { Logger } from './logger.js';\r\n\r\nexport interface SetCacheOptions {\r\n /**\r\n * Time to Live in seconds\r\n */\r\n ttl?: number;\r\n}\r\n\r\nexport interface BaseCacheOptions {\r\n /**\r\n * The name of this strategy. Used for logging\r\n */\r\n name?: string;\r\n\r\n /**\r\n * A logger that is useful for debugging the cache chain\r\n */\r\n logger?: Logger;\r\n}\r\n\r\nexport interface ICache {\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * Returns `null` when the resource is not found.\r\n *\r\n * @param key The cache key\r\n */\r\n get<T>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * If the cached resource is not found, fetches it by calling the `load` function and then saves it into cache.\r\n *\r\n * @param key The cache key\r\n * @param load The function which should fetch the fresh data from origin\r\n * @param options The options used to save the cache\r\n */\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T>;\r\n\r\n /**\r\n * Writes a resource into cache.\r\n *\r\n * The value **must** be JSON stringifiable.\r\n *\r\n * @param key The cache key\r\n * @param value The resource value\r\n * @param options The options to save the cache\r\n */\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes a cached resource by a key.\r\n *\r\n * @param key The cache key to delete\r\n */\r\n delete(key: string): Promise<void>;\r\n\r\n /**\r\n * Reads cached resources in batch.\r\n *\r\n * @param keys The list of cache keys.\r\n */\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>>;\r\n\r\n /**\r\n * Writes cache resources in batch.\r\n *\r\n * The values **must** be JSON stringifiable.\r\n *\r\n * @param data The cache keys and values\r\n * @param options The options to save the cache\r\n */\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes cached resources by their keys in batch.\r\n *\r\n * @param keys The list of keys to delete\r\n */\r\n deleteMany(keys: string[]): Promise<void>;\r\n\r\n}\r\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -220,6 +220,7 @@ interface MapLike<K, V> {
|
|
|
220
220
|
*
|
|
221
221
|
* It ignores expiration times, but a limit of cached items can be set.
|
|
222
222
|
*
|
|
223
|
+
* It implements a simple FIFO eviction policy:
|
|
223
224
|
* Once the limit of items is reached, the first inserted keys will be purged.
|
|
224
225
|
*/
|
|
225
226
|
declare class LocalMapCache extends BaseCache {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["Logger","Logger","SetCacheOptions","BaseCacheOptions","ICache","T","Promise","Record"],"sources":["../src/types/logger.d.ts","../src/types/cache.d.ts","../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["\r\nexport interface Logger {\r\n /**\r\n * Sends a debug log\r\n * @param name The cache name\r\n * @param message The log message\r\n */\r\n debug: (name?: string, ...message: any[]) => void;\r\n}\r\n","import type { Logger } from './logger.js';\r\n\r\nexport interface SetCacheOptions {\r\n /**\r\n * Time to Live in seconds\r\n */\r\n ttl?: number;\r\n}\r\n\r\nexport interface BaseCacheOptions {\r\n /**\r\n * The name of this strategy. Used for logging\r\n */\r\n name?: string;\r\n\r\n /**\r\n * A logger that is useful for debugging the cache chain\r\n */\r\n logger?: Logger;\r\n}\r\n\r\nexport interface ICache {\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * Returns `null` when the resource is not found.\r\n *\r\n * @param key The cache key\r\n */\r\n get<T>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * If the cached resource is not found, fetches it by calling the `load` function and then saves it into cache.\r\n *\r\n * @param key The cache key\r\n * @param load The function which should fetch the fresh data from origin\r\n * @param options The options used to save the cache\r\n */\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T>;\r\n\r\n /**\r\n * Writes a resource into cache.\r\n *\r\n * The value **must** be JSON stringifiable.\r\n *\r\n * @param key The cache key\r\n * @param value The resource value\r\n * @param options The options to save the cache\r\n */\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes a cached resource by a key.\r\n *\r\n * @param key The cache key to delete\r\n */\r\n delete(key: string): Promise<void>;\r\n\r\n /**\r\n * Reads cached resources in batch.\r\n *\r\n * @param keys The list of cache keys.\r\n */\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>>;\r\n\r\n /**\r\n * Writes cache resources in batch.\r\n *\r\n * The values **must** be JSON stringifiable.\r\n *\r\n * @param data The cache keys and values\r\n * @param options The options to save the cache\r\n */\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes cached resources by their keys in batch.\r\n *\r\n * @param keys The list of keys to delete\r\n */\r\n deleteMany(keys: string[]): Promise<void>;\r\n\r\n}\r\n"],"mappings":";;;;;;;;;;;;UACiBA,MAAAA;;;;;;;;;;UCCAE,eAAAA;;;;;;UAOAC,gBAAAA;;;ADRjB;;;;ACCA;AAOA;EAYA,MAAiBC,CAAAA,EAHNH,MAGY;;AAkByBI,UAlB/BD,MAAAA,CAkB+BC;EAAcH;;;;;;EAkBvCI,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EA5BAA,OA4BAA,CA5BQD,CA4BRC,GAAAA,IAAAA,CAAAA;;EAOeC;;;;;;;;wCAzBED,QAAQD,cAAcH,kBAAkBI,QAAQD;;;AC9BxF;;;;;;;;EAagC,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,ED4BHA,CC5BG,EAAA,OAAA,CAAA,ED4BUH,eC5BV,CAAA,ED4B4BI,OC5B5B,CAAA,IAAA,CAAA;;EAEc;;;;;EAkBF,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EDerBA,OCfqB,CAAA,IAAA,CAAA;;EAUJ;;;;;EA3CG,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EDuDbA,OCvDa,CDuDLC,MCvDK,CAAA,MAAA,EDuDUF,CCvDV,GAAA,IAAA,CAAA,CAAA;;;;;ACL3C;;;;;EAmBA,OAAiB,CAAA,CAAA,CAAA,CAAA,IAAA,EFmDEE,MEnDF,CAAA,MAAqB,EFmDJF,CEnDI,CAAA,EAAA,OAAwB,CAAhB,EFmDEH,eEnDc,CAAA,EFmDII,OEnDJ,CAAA,IAAA,CAAA;;EAoBN;;;;;EAoB3B,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EFkBCA,OElBD,CAAA,IAAA,CAAA;;;;;;;;;;uBDtDP,SAAA,YAAqB;;8BAEb;iCAEG;EFZhBN,SAAM,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EEiBS,OFjBT,CEiBiB,CFjBjB,GAAA,IAAA,CAAA;sCEmBe,aAAa,kBAAkB;gCAErC;wCAEc,QAAQ,cAAc,kBAAkB,QAAQ;EDtB7EE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAe,EAAA,CAAA,ECwCI,ODxCJ,CCwCY,MDxCZ,CAAA,MAAA,ECwC2B,CDxC3B,GAAA,IAAA,CAAA,CAAA;EAOfC,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EC2CQ,MD3CQ,CAAA,MAStBF,ECkC6B,CDlC7BA,CAAAA,EAAAA,OAAM,CAAA,ECkCqC,eDlCrC,CAAA,ECkCuD,ODlCvD,CAAA,IAAA,CAAA;EAGAG,UAAM,CAAA,IAAAC,EAAAA,MAAA,EAAA,CAAA,ECyCa,ODzCb,CAAA,IAAA,CAAA;;;;UEjBN,uBAAA,SAAgC;;;;SAIxC,4BAA4B;;;;;AHPrC;;;;ACCA;AAOA;EAYiBD,cAAMC,CAAAA,EAAAA,OAAA;;AAQAC,UENN,oBAAA,SAA6B,gBFMvBA,CAAAA;EAUyBD;;;EAAwCA,GAAAA,CAAAA,EAAAA,MAAAA;EAARC;;;EAWpBA,GAAAA,CAAAA,EAAAA,MAAAA;;;;;;;;;AA+B9BA,cEvCjB,aAAA,SAAsB,SAAA,CFuCLA;EAAO,mBAAA,KAAA,EEtCT,QFsCS,CAAA,MAAA,EAAA,GAAA,EAAA,GAAA,GEtCmB,OFsCnB,CAAA,GAAA,CAAA,CAAA;;wBEnCd,uBAAuB;uBAiBjB,QAAQ;EDtDf,SAAA,CAAA,CAAA,CAAU,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,GC8DiB,OD9DjB,CC8DyB,CD9DzB,CAAA,EAAA,OAAA,CAAA,EC8DuC,eD9DvC,CAAA,EC8DyD,OD9DzD,CC8DiE,CD9DjE,CAAA;EAEF,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EC2EK,CD3EL,EAAA,OAAA,CAAA,EC2EkB,eD3ElB,CAAA,EC2EoC,OD3EpC,CAAA,IAAA,CAAA;EAEG,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,ECmFJ,ODnFI,CAAA,IAAA,CAAA;;;;UEThB,uBAAA,SAAgC;;;;SAIxC;;UAGQ,oBAAA,SAA6B;;;AJV9C;;;;ACCA;EAOiBH,GAAAA,CAAAA,EAAAA,MAAAA;AAYjB;;;;;;AAkBwFE,cGX3E,aAAA,SAAsB,SAAA,CHWqDA;EAARC,mBAAAA,KAAAA,EGVpD,QHUoDA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA;EAWnDD,WAAAA,CAAAA,OAAAA,CAAAA,EGnBN,oBHmBMA,GGnBiB,uBHmBjBA;EAAaH,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EGNb,OHMaA,CGNL,CHMKA,GAAAA,IAAAA,CAAAA;EAAkBI,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EGEzB,CHFyBA,EAAAA,OAAAA,CAAAA,EGEZ,eHFYA,CAAAA,EGEM,OHFNA,CAAAA,IAAAA,CAAAA;EAOrCA,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EGKM,OHLNA,CAAAA,IAAAA,CAAAA;;;;UItDN,oBAAA,SAA6B;;;;UAIpC;;;;;;ALNV;UKeiB;WACN,IAAI;WACJ,UAAU;EJhBJJ,MAAAA,CAAAA,GAAAA,EIiBH,CJjBGA,CAAAA,EAAAA,IAAe;EAOfC,GAAAA,CAAAA,GAAAA,EIWN,CJXMA,CAAAA,EAAAA,OAAgB;EAYhBC,IAAAA,EAAAA,EIAP,gBJAa,CIAI,CJAJ,CAAA;EAQQC,IAAAA,EAAAA,MAAAA;EAARC,KAAAA,EAAAA,EAAAA,IAAAA;;;;;;;;;AA4BAA,cIxBV,aAAA,SAAsB,SAAA,CJwBZA;EAO8BD,mBAAAA,KAAAA,EI9BzB,OJ8ByBA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA;EAAfE,UAAAA,GAAAA,EAAAA,MAAAA;EAARD,WAAAA,CAAAA,OAAAA,CAAAA,EI3BP,oBJ2BOA;EAUID,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EI/BL,OJ+BKA,CI/BG,CJ+BHA,GAAAA,IAAAA,CAAAA;EAAfE,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EIvBgB,CJuBhBA,EAAAA,OAAAA,CAAAA,EIvB6B,eJuB7BA,CAAAA,EIvB+C,OJuB/CA,CAAAA,IAAAA,CAAAA;EAA6BL,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EIbnB,OJamBA,CAAAA,IAAAA,CAAAA;EAAkBI,OAAAA,CAAAA,IAAAA,EIPnC,MJOmCA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EIPJ,eJOIA,CAAAA,EIPc,OJOdA,CAAAA,IAAAA,CAAAA;EAOpCA,KAAAA,CAAAA,CAAAA,EAAAA,IAAAA;EAAO,UAAA,KAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;;;;;;;;;;;;cKtExB,SAAA,YAAqB;;ENVjBN,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAM,EAAA,MAAA,CAAA,EMaM,ONbN,CMac,CNbd,GAAA,IAAA,CAAA;8BMiBa,QAAQ,eAAe;wCAInB,QAAQ,cAAc,kBAAkB,QAAQ;6BAIrD,aAAa,kBAAkB;ELxBjDE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EKyBQ,MLzBO,CAAA,MAAA,EKyBQ,CLzBR,CAAA,EAAA,OAAA,CAAA,EKyBsB,eLzBtB,CAAA,EKyBwC,OLzBxC,CAAA,IAAA,CAAA;EAOfC,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAgB,EKoBJ,OLpBI,CAAA,IAStBF,CAAAA;EAGMG,UAAM,CAAA,IAAAC,EAAAA,MAAA,EAAA,CAAA,EKSa,OLTb,CAAA,IAAA,CAAA;;;;UMhBN,mBAAA,SAA4B;;;;UAInC,QAAQ;;;;EPRDL,UAAM,CAAA,EAAA,MAAA;;;;ACCvB;AAOA;AAYA;;;EAkBgDK,iBAAAA,CAAAA,EAAAA,OAAAA;;;;;AAWnBA,cMpBhB,YAAA,SAAqB,SAAA,CNoBLA;EAAaH,mBAAAA,MAAAA,EMnBb,KNmBaA,GMnBL,ONmBKA;EAAkBI,UAAAA,UAAAA,CAAAA,EAAAA,MAAAA;EAOrCA,UAAAA,iBAAAA,CAAAA,EAAAA,OAAAA;EAO8BD,WAAAA,CAAAA,OAAAA,EM7B9B,mBN6B8BA;EAAfE,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EMtBT,ONsBSA,CMtBD,CNsBCA,GAAAA,IAAAA,CAAAA;EAARD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EMdK,CNcLA,EAAAA,OAAAA,CAAAA,EMdkB,eNclBA,CAAAA,EMdoC,ONcpCA,CAAAA,IAAAA,CAAAA;EAUID,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EMXL,ONWKA,CAAAA,IAAAA,CAAAA;EAAfE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EML0B,ONK1BA,CMLkC,MNKlCA,CAAAA,MAAAA,EMLiD,CNKjDA,GAAAA,IAAAA,CAAAA,CAAAA;EAA6BL,OAAAA,CAAAA,IAAAA,EMWjB,MNXiBA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EMWc,eNXdA,CAAAA,EMWgC,ONXhCA,CAAAA,IAAAA,CAAAA;EAAkBI,UAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EM6BrB,ON7BqBA,CAAAA,IAAAA,CAAAA;;;;KOtE7D,OAAA,GAAQ,kBAAkB,sBAAsB,mBAAmB;UAEvD,iBAAA,SAA0B;;;;UAIjC,kBAAkB,sBAAsB,mBAAmB;;;;ERTpDN,UAAM,CAAA,EAAA,MAAA;;;;ACCvB;AAOA;AAYA;;;EAkBgDK,iBAAAA,CAAAA,EAAAA,OAAAA;;;;;AAWnBA,cOnBhB,UAAA,SAAmB,SAAA,CPmBHA;EAAaH,mBAAAA,MAAAA,EOlBb,OPkBaA;EAAkBI,UAAAA,UAAAA,CAAAA,EAAAA,MAAAA;EAOrCA,UAAAA,iBAAAA,CAAAA,EAAAA,OAAAA;EAO8BD,WAAAA,CAAAA,OAAAA,EO5B9B,iBP4B8BA;EAAfE,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EOrBT,OPqBSA,COrBD,CPqBCA,GAAAA,IAAAA,CAAAA;EAARD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EObK,CPaLA,EAAAA,OAAAA,CAAAA,EObkB,ePalBA,CAAAA,EOboC,OPapCA,CAAAA,IAAAA,CAAAA;EAUID,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EOXL,OPWKA,CAAAA,IAAAA,CAAAA;EAAfE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EOL0B,OPK1BA,COLkC,MPKlCA,CAAAA,MAAAA,EOLiD,CPKjDA,GAAAA,IAAAA,CAAAA,CAAAA;EAA6BL,OAAAA,CAAAA,IAAAA,EOWjB,MPXiBA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EOWc,ePXdA,CAAAA,EOWgC,OPXhCA,CAAAA,IAAAA,CAAAA;EAAkBI,UAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EO+BrB,OP/BqBA,CAAAA,IAAAA,CAAAA;;;;UQtEjD,uBAAA,SAAgC;;;;UAIvC,cAAc,qBAAqB;;;;;ATP7C;;;;ACCiBJ,cQiBJ,gBAAA,SAAyB,SAAA,CRjBN;EAOfC,mBAAgB,MAAA,EQWJ,URFZ;EAGAC,UAAM,UAAA,CAAA,EAAA,MAAA;EAQQC,WAAAA,CAAAA,OAAAA,EQNR,uBRMQA;EAARC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EQAM,ORANA,CQAc,CRAdA,GAAAA,IAAAA,CAAAA;EAUyBD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EQFb,CREaA,EAAAA,OAAAA,CAAAA,EQFA,eREAA,CAAAA,EQFkB,ORElBA,CAAAA,IAAAA,CAAAA;EAARC,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EQUX,ORVWA,CAAAA,IAAAA,CAAAA;EAAsBJ,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EQgBjB,ORhBiBA,CQgBT,MRhBSA,CAAAA,MAAAA,EQgBM,CRhBNA,GAAAA,IAAAA,CAAAA,CAAAA;EAA0BG,UAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EQgC3C,ORhC2CA,CAAAA,IAAAA,CAAAA;;;;USnCvE,oBAAA,SAA6B;;;;UAIpC;;;;;AVPV;;;;ACCiBH,cSiBJ,aAAA,SAAsB,SAAA,CTjBH;EAOfC,mBAAgB,MAAA,ESWJ,QTFlBF;EAGMG,UAAM,UAAA,CAAA,EAAA,MAAA;EAQQC,WAAAA,CAAAA,OAAAA,ESNR,oBTMQA;EAARC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,ESAM,OTANA,CSAc,CTAdA,GAAAA,IAAAA,CAAAA;EAUyBD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,ESFb,CTEaA,EAAAA,OAAAA,CAAAA,ESFA,eTEAA,CAAAA,ESFkB,OTElBA,CAAAA,IAAAA,CAAAA;EAARC,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,ESQX,OTRWA,CAAAA,IAAAA,CAAAA;EAAsBJ,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EScjB,OTdiBA,CScT,MTdSA,CAAAA,MAAAA,EScM,CTdNA,GAAAA,IAAAA,CAAAA,CAAAA;;;;UUnC7C,iBAAA,SAA0B;;;;UAIjC;;;;;AXPV;;;;ACCiBA,cUiBJ,UAAA,SAAmB,SAAA,CVjBA;EAOfC,mBAAgB,MAAA,EUWJ,MVFlBF;EAGMG,UAAM,UAAA,CAAA,EAAA,MAAA;EAQQC,WAAAA,CAAAA,OAAAA,EUNR,iBVMQA;EAARC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EUAM,OVANA,CUAc,CVAdA,GAAAA,IAAAA,CAAAA;EAUyBD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EUFb,CVEaA,EAAAA,OAAAA,CAAAA,EUFA,eVEAA,CAAAA,EUFkB,OVElBA,CAAAA,IAAAA,CAAAA;EAARC,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EUUX,OVVWA,CAAAA,IAAAA,CAAAA;;;;UWnCvB,qBAAA,SAA8B;;;;MAIzC;;;;;AZPN;;;;ACCA;AAOA;AAYA;;AAQuBA,cWNV,cAAA,SAAuB,SAAA,CXMbA;EAUyBD,mBAAAA,EAAAA,EWfvB,WXeuBA;EAARC,UAAAA,YAAAA,CAAAA,EAAAA,MAAAA;EAAsBJ,WAAAA,CAAAA,OAAAA,EWZvC,qBXYuCA;EAA0BG,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EWNjE,OXMiEA,CWNzD,CXMyDA,GAAAA,IAAAA,CAAAA;EAARC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EWFnD,CXEmDA,EAAAA,OAAAA,CAAAA,EWFvC,eXEuCA,CAAAA,EWFhB,OXEgBA,CAAAA,IAAAA,CAAAA;EAWnDD,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EWTN,OXSMA,CAAAA,IAAAA,CAAAA;EAAaH,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EWLG,OXKHA,CWLW,MXKXA,CAAAA,MAAAA,EWL0B,CXK1BA,GAAAA,IAAAA,CAAAA,CAAAA;;;;UY9CzB,gBAAA,SAAyB;;;;QAIlC;;cAGK,SAAA,SAAkB,SAAA;2BACJ;uBAEJ;EbbNF,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAM,EAAA,MAAA,CAAA,EakBM,OblBN,CakBc,CblBd,GAAA,IAAA,CAAA;6BawBY,aAAa,kBAAkB;uBAIrC;8BAIgB,QAAQ,eAAe;EZ/BnDE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EY0CiB,MZ1CF,CAAA,MAAA,EY0CiB,CZ1CjB,CAAA,EAAA,OAAA,CAAA,EY0C+B,eZ1C/B,CAAA,EY0CiD,OZ1CjD,CAAA,IAAA,CAAA;EAOfC,UAAAA,CAAAA,IAAAA,EAAAA,MAAgB,EAAA,CAAA,EY+CY,OZtClCF,CAAAA,IAAM,CAAA;AAGjB;;;UanBiB,qBAAA;;;;iBAIA,QAAQ,UAAU;;;;;;;AdLnC;;;;ACCA;AAOA;AAYA;;;;;;;;;;;;;;;;;;;;;;casBa,cAAA,YAA0B;oCACH,QAAQ,UAAU;EZnChC,UAAA,KAAU,EYoCb,OZpCa,CYoCL,MZpCK,CAAA,GAAA,IAAA;EAEF,WAAA,CAAA,OAAA,EYoCP,qBZpCO;EAEG,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EY0CJ,OZ1CI,CY0CI,CZ1CJ,GAAA,IAAA,CAAA;EAKO,SAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,GYyCM,OZzCN,CYyCc,CZzCd,CAAA,EAAA,OAAA,CAAA,EYyC4B,eZzC5B,CAAA,EYyC8C,OZzC9C,CYyCsD,CZzCtD,CAAA;EAAR,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EY6CG,CZ7CH,EAAA,OAAA,CAAA,EY6CgB,eZ7ChB,CAAA,EY6CkC,OZ7ClC,CAAA,IAAA,CAAA;EAEM,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EY+CT,OZ/CS,CAAA,IAAA,CAAA;EAAa,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EYmDf,OZnDe,CYmDP,MZnDO,CAAA,MAAA,EYmDQ,CZnDR,GAAA,IAAA,CAAA,CAAA;EAAkB,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EYuD5C,MZvD4C,CAAA,MAAA,EYuD7B,CZvD6B,CAAA,EAAA,OAAA,CAAA,EYuDf,eZvDe,CAAA,EYuDG,OZvDH,CAAA,IAAA,CAAA;EAErC,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EYyDI,OZzDJ,CAAA,IAAA,CAAA;EAEsB;;;EAAwC,YAAA,CAAA,CAAA,EY8DrE,OZ9DqE,CY8D7D,MZ9D6D,CAAA;;;;;;;UalB7E,sBAAA,SAA+B;;;;SAIvC;;UAGC,cAAA;EfZOD,OAAAA,EeaN,OfbY,CAAA,GAAA,GAAA,IAAA,CAAA;;;;ACCvB;AAOA;AAYA;;AAQuBM,ccNV,eAAA,YAA2B,MdMjBA,CAAAA;EAUyBD,mBAAAA,eAAAA,EcfV,GdeUA,CAAAA,MAAAA,EcfE,cdeFA,CAAAA;EAARC,mBAAAA,KAAAA,EcdZ,MdcYA;EAAsBJ,mBAAAA,IAAAA,CAAAA,EAAAA,MAAAA;EAA0BG,mBAAAA,MAAAA,CAAAA,EcZ1D,MdY0DA;EAARC,WAAAA,CAAAA,OAAAA,EcVzD,sBdUyDA;EAWnDD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EcfN,OdeMA,CcfE,CdeFA,GAAAA,IAAAA,CAAAA;EAAaH,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAAAA,GAAAA,GcGI,OdHJA,CcGY,CdHZA,CAAAA,EAAAA,OAAAA,CAAAA,EcG0B,edH1BA,CAAAA,EcG4C,OdH5CA,CcGoD,CdHpDA,CAAAA;EAAkBI,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EciD/B,CdjD+BA,EAAAA,OAAAA,CAAAA,EciDlB,edjDkBA,CAAAA,EciDA,OdjDAA,CAAAA,IAAAA,CAAAA;EAOrCA,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EcuDM,OdvDNA,CAAAA,IAAAA,CAAAA;EAO8BD,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,Ec+DjB,Od/DiBA,Cc+DT,Md/DSA,CAAAA,MAAAA,Ec+DM,Cd/DNA,GAAAA,IAAAA,CAAAA,CAAAA;EAAfE,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EcuGnB,MdvGmBA,CAAAA,MAAAA,EcuGJ,CdvGIA,CAAAA,EAAAA,OAAAA,CAAAA,EcuGU,edvGVA,CAAAA,EcuG4B,OdvG5BA,CAAAA,IAAAA,CAAAA;EAARD,UAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EcsHM,OdtHNA,CAAAA,IAAAA,CAAAA;;;;Ue9Db,qBAAA;;;;SAIR;;;;;;;AhBLT;;;;ACCA;AAOA;AAYA;;AAQuBA,ceLV,cAAA,YAA0B,MfKhBA,CAAAA;EAUyBD,mBAAAA,KAAAA,EedpB,MfcoBA;EAARC,UAAAA,UAAAA,EAAAA,MAAAA;EAAsBJ,UAAAA,YAAAA,EAAAA,MAAAA;EAA0BG,WAAAA,CAAAA,OAAAA,EeVjE,qBfUiEA;EAARC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EeJzD,OfIyDA,CeJjD,CfIiDA,GAAAA,IAAAA,CAAAA;EAWnDD,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAAAA,GAAAA,GeXW,OfWXA,CeXmB,CfWnBA,CAAAA,EAAAA,OAAAA,CAAAA,EeXgC,efWhCA,CAAAA,EeXuD,OfWvDA,CeX+D,CfW/DA,CAAAA;EAAaH,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EePb,CfOaA,EAAAA,OAAAA,CAAAA,EePA,efOAA,CAAAA,EePkB,OfOlBA,CAAAA,IAAAA,CAAAA;EAAkBI,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EeHrC,OfGqCA,CAAAA,IAAAA,CAAAA;EAOrCA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EeNO,OfMPA,CeNe,MfMfA,CAAAA,MAAAA,EeN8B,CfM9BA,GAAAA,IAAAA,CAAAA,CAAAA;EAO8BD,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EeTlC,MfSkCA,CAAAA,MAAAA,EeTnB,CfSmBA,CAAAA,EAAAA,OAAAA,CAAAA,EeTL,efSKA,CAAAA,EeTa,OfSbA,CAAAA,IAAAA,CAAAA;EAAfE,UAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EeLR,OfKQA,CAAAA,IAAAA,CAAAA;EAARD,UAAAA,SAAAA,CAAAA,OAAAA,CAAAA,EeDC,efCDA,CAAAA,EeDwB,efCxBA;;;;UgB9DpB,+BAAA;;;;SAID;;UAGC,4BAAA,SAAqC;;;;;AjBR/C;;;;ACCA;AAOA,UgBWU,oBAAA,SAA6B,+BhBFtB,CAAA;EAGAF;;;EAkB+BC,MAAAA,CAAAA,EAAAA,MAAAA;EAARC;;;EAAwCA,MAAAA,CAAAA,EAAAA,MAAAA;;AAWtCJ,KgBlB9B,2BAAA,GAA8B,oBhBkBAA,GgBlBuB,4BhBkBvBA;;;;;;;;;AAwBwBI,cgBhCrD,oBAAA,YAAgC,MhBgCqBA,CAAAA;EAOpCA,mBAAAA,KAAAA,EgBtCF,MhBsCEA;EAAO,UAAA,SAAA,EAAA,CAAA,GAAA,EAAA,MAAA,EAAA,GAAA,MAAA;uBgBnCd;uBAYA,QAAQ;wCAIS,QAAQ,cAAc,kBAAkB,QAAQ;EfrDlE,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAU,MAAA,EAAA,KAAA,EeyDH,CfzDG,EAAA,OAAA,CAAA,EeyDU,efzDV,CAAA,EeyD4B,OfzD5B,CAAA,IAAA,CAAA;EAEF,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,Ee2DP,Of3DO,CAAA,IAAA,CAAA;EAEG,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,Ee6DG,Of7DH,Ce6DW,Mf7DX,CAAA,MAAA,Ee6D0B,Cf7D1B,GAAA,IAAA,CAAA,CAAA;EAKO,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EeoErB,MfpEqB,CAAA,MAAA,EeoEN,CfpEM,CAAA,EAAA,OAAA,CAAA,EeoEQ,efpER,CAAA,EeoE0B,OfpE1B,CAAA,IAAA,CAAA;EAAR,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,Ee6EF,Of7EE,CAAA,IAAA,CAAA;;;;;;;UgBZf,eAAA,SAAwB;;;;SAIhC;;;AlBTT;;;;ACCA;EAOiBH,QAAAA,EAAAA,MAAAA;AAYjB;;;;;;;;AA6B6BE,ciBfhB,QAAA,YAAoB,MjBeJA,CAAAA;EAAaH,mBAAAA,YAAAA,EiBdP,GjBcOA,CAAAA,MAAAA,EiBdK,OjBcLA,CAAAA,GAAAA,CAAAA,CAAAA;EAAkBI,mBAAAA,KAAAA,EiBbhC,MjBagCA;EAOrCA,mBAAAA,IAAAA,CAAAA,EAAAA,MAAAA;EAO8BD,mBAAAA,MAAAA,CAAAA,EiBzBvB,MjByBuBA;EAAfE,UAAAA,UAAAA,EAAAA,MAAAA;EAARD,UAAAA,QAAAA,EAAAA,MAAAA;EAUID,WAAAA,CAAAA,OAAAA,EiB/BX,ejB+BWA;EAAfE,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EiBvBU,OjBuBVA,CiBvBkB,CjBuBlBA,GAAAA,IAAAA,CAAAA;EAA6BL,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAAAA,GAAAA,GiBfF,OjBeEA,CiBfM,CjBeNA,CAAAA,EAAAA,OAAAA,CAAAA,EiBfmB,ejBenBA,CAAAA,EiBf0C,OjBe1CA,CiBfkD,CjBelDA,CAAAA;EAAkBI,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EiBerC,CjBfqCA,EAAAA,OAAAA,CAAAA,EiBezB,ejBfyBA,CAAAA,EiBeF,OjBfEA,CAAAA,IAAAA,CAAAA;EAOpCA,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EiBwBP,OjBxBOA,CAAAA,IAAAA,CAAAA;EAAO,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EiB8BD,OjB9BC,CiB8BO,MjB9BP,CAAA,MAAA,EiB8BsB,CjB9BtB,GAAA,IAAA,CAAA,CAAA;mBiB2ClB,eAAe,cAAa,kBAAuB;8BAmBxC;;;;UC5Ib,kBAAA,SAA2B;;;;;;SAMnC;;UAGQ,SAAA;;AnBXjB;;SmBeS;;AlBdT;AAOA;EAYiBF,OAAAA,CAAAA,EkBAL,elBAW;;;;;;;;;;;AAoCAE,ckBxBV,WAAA,SAAoB,SAAA,ClBwBVA;EAO8BD,mBAAAA,KAAAA,EkB9BzB,SlB8ByBA,EAAAA;EAAfE,WAAAA,CAAAA,OAAAA,EkB5Bf,kBlB4BeA;EAARD,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EkBvBD,OlBuBCA,CkBvBO,ClBuBPA,GAAAA,IAAAA,CAAAA;EAUID,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAAAA,GAAAA,GkBhBqB,OlBgBrBA,CkBhB6B,ClBgB7BA,CAAAA,EAAAA,OAAAA,CAAAA,EkBhB2C,elBgB3CA,CAAAA,EkBhB6D,OlBgB7DA,CkBhBqE,ClBgBrEA,CAAAA;EAAfE,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,EkBCgB,ClBDhBA,EAAAA,OAAAA,CAAAA,EkBC6B,elBD7BA,CAAAA,EkBC+C,OlBD/CA,CAAAA,IAAAA,CAAAA;EAA6BL,MAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,EkBanB,OlBbmBA,CAAAA,IAAAA,CAAAA;EAAkBI,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EkBqBrB,OlBrBqBA,CkBqBb,MlBrBaA,CAAAA,MAAAA,EkBqBE,ClBrBFA,GAAAA,IAAAA,CAAAA,CAAAA;EAOpCA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,EkBiDI,MlBjDJA,CAAAA,MAAAA,EkBiDmB,ClBjDnBA,CAAAA,EAAAA,OAAAA,CAAAA,EkBiDiC,elBjDjCA,CAAAA,EkBiDmD,OlBjDnDA,CAAAA,IAAAA,CAAAA;EAAO,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EkB6DQ,OlB7DR,CAAA,IAAA,CAAA;;;;UmB9EpB,6BAAA,SAAsC;;;;SAI9C;;UAGC,iBAAA;;;;EpBTON,QAAAA,EAAM,MAAA;;;;ECCNE,QAAAA,EAAAA,MAAAA;EAOAC;EAYAC,WAAM,EAAA,MAAAC;;UmBMb,gBAAA,CnBEaC;EAUyBD;EAARC,QAAAA,EAAAA,MAAAA;EAAsBJ;EAA0BG,OAAAA,EAAAA,MAAAA;EAARC;EAWnDD,QAAAA,EAAAA,MAAAA;EAAaH;EAAkBI,OAAAA,EAAAA,MAAAA;EAOrCA;EAO8BD,UAAAA,EAAAA,MAAAA;;AAAvBC,KmBpBlB,YAAA,GAAe,iBnBoBGA,GmBpBiB,gBnBoBjBA;;;;;;AAiBO,cmB9BxB,sBAAA,YAAkC,MnB8BV,CAAA;4BmB7BT;8BACE;;ElB5CR,UAAA,YAAU,EkB+CN,iBlB/CM;EAEF,UAAA,gBAAA,EkBoDA,gBlBpDA;EAEG,WAAA,CAAA,OAAA,EkB0DV,6BlB1DU;EAKO,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EkB2DX,OlB3DW,CkB2DH,ClB3DG,GAAA,IAAA,CAAA;EAAR,SAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,GkBiFc,OlBjFd,CkBiFsB,ClBjFtB,CAAA,EAAA,OAAA,CAAA,EkBiFoC,elBjFpC,CAAA,EkBiFsD,OlBjFtD,CkBiF8D,ClBjF9D,CAAA;EAEM,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EkB4HH,ClB5HG,EAAA,OAAA,CAAA,EkB4HU,elB5HV,CAAA,EkB4H4B,OlB5H5B,CAAA,IAAA,CAAA;EAAa,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EkByItB,OlBzIsB,CAAA,IAAA,CAAA;EAAkB,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EkBsJjC,OlBtJiC,CkBsJzB,MlBtJyB,CAAA,MAAA,EkBsJV,ClBtJU,GAAA,IAAA,CAAA,CAAA;EAErC,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EkByKP,MlBzKO,CAAA,MAAA,EkByKQ,ClBzKR,CAAA,EAAA,OAAA,CAAA,EkByKsB,elBzKtB,CAAA,EkByKwC,OlBzKxC,CAAA,IAAA,CAAA;EAEsB,UAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EkBsLlB,OlBtLkB,CAAA,IAAA,CAAA;EAAR,UAAA,CAAA,CAAA,EkBmM9B,YlBnM8B;EAAsB,YAAA,CAAA,CAAA,EAAA,IAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["Logger","Logger","SetCacheOptions","BaseCacheOptions","ICache","T","Promise","Record"],"sources":["../src/types/logger.d.ts","../src/types/cache.d.ts","../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["\r\nexport interface Logger {\r\n /**\r\n * Sends a debug log\r\n * @param name The cache name\r\n * @param message The log message\r\n */\r\n debug: (name?: string, ...message: any[]) => void;\r\n}\r\n","import type { Logger } from './logger.js';\r\n\r\nexport interface SetCacheOptions {\r\n /**\r\n * Time to Live in seconds\r\n */\r\n ttl?: number;\r\n}\r\n\r\nexport interface BaseCacheOptions {\r\n /**\r\n * The name of this strategy. Used for logging\r\n */\r\n name?: string;\r\n\r\n /**\r\n * A logger that is useful for debugging the cache chain\r\n */\r\n logger?: Logger;\r\n}\r\n\r\nexport interface ICache {\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * Returns `null` when the resource is not found.\r\n *\r\n * @param key The cache key\r\n */\r\n get<T>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Reads the cached resource from a key.\r\n * If the cached resource is not found, fetches it by calling the `load` function and then saves it into cache.\r\n *\r\n * @param key The cache key\r\n * @param load The function which should fetch the fresh data from origin\r\n * @param options The options used to save the cache\r\n */\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T>;\r\n\r\n /**\r\n * Writes a resource into cache.\r\n *\r\n * The value **must** be JSON stringifiable.\r\n *\r\n * @param key The cache key\r\n * @param value The resource value\r\n * @param options The options to save the cache\r\n */\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes a cached resource by a key.\r\n *\r\n * @param key The cache key to delete\r\n */\r\n delete(key: string): Promise<void>;\r\n\r\n /**\r\n * Reads cached resources in batch.\r\n *\r\n * @param keys The list of cache keys.\r\n */\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>>;\r\n\r\n /**\r\n * Writes cache resources in batch.\r\n *\r\n * The values **must** be JSON stringifiable.\r\n *\r\n * @param data The cache keys and values\r\n * @param options The options to save the cache\r\n */\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void>;\r\n\r\n /**\r\n * Deletes cached resources by their keys in batch.\r\n *\r\n * @param keys The list of keys to delete\r\n */\r\n deleteMany(keys: string[]): Promise<void>;\r\n\r\n}\r\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -132,6 +132,7 @@ var LocalTTLCache = class extends BaseCache {
|
|
|
132
132
|
*
|
|
133
133
|
* It ignores expiration times, but a limit of cached items can be set.
|
|
134
134
|
*
|
|
135
|
+
* It implements a simple FIFO eviction policy:
|
|
135
136
|
* Once the limit of items is reached, the first inserted keys will be purged.
|
|
136
137
|
*/
|
|
137
138
|
var LocalMapCache = class extends BaseCache {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["options","data: Record<string, T | null>","data: Record<string, T | null>","raw: [string, string][]","data: Record<string, T | null>","data: Record<string, T | null>","result: Record<string, T | null>","promise","items: [string, Promise<T | null>][]","remainingKeys: string[]","item: CachedItem<T>","items: Record<string, T | null>","items: Record<string, CachedItem<T>>","didTriggerLoad: boolean","loadFinishAt: number"],"sources":["../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["import type { BaseCacheOptions, ICache, SetCacheOptions } from '../types/cache.js';\r\nimport type { Logger } from '../types/logger.js';\r\n\r\n/**\r\n * The base implementation of a cache.\r\n *\r\n * This class only requires subclasses to implement {@link ICache#get}, {@link ICache#set} and {@link ICache#delete}.\r\n * All other methods fall back into these three.\r\n */\r\nexport abstract class BaseCache implements ICache {\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n\r\n protected constructor(options: BaseCacheOptions) {\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n }\r\n\r\n abstract get<T>(key: string): Promise<T | null>;\r\n\r\n abstract set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n abstract delete(key: string): Promise<void>;\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n let data = await this.get<T>(key);\r\n\r\n if (data !== null) {\r\n this.logger?.debug(this.name, '[getOrLoad] Returning from cache.', 'key =', key);\r\n\r\n return data;\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing the cache...', 'key =', key);\r\n\r\n data = await load();\r\n\r\n await this.set(key, data, options);\r\n\r\n return data;\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Reading all keys in parallel...', 'keys =', keys);\r\n\r\n return Object.fromEntries(\r\n await Promise.all(\r\n keys.map(async key => [key, await this.get<any>(key)]),\r\n ),\r\n );\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany] Writing all keys in parallel...', 'data =', data);\r\n\r\n await Promise.all(\r\n Object.entries(data).map(([key, value]) =>\r\n this.set(key, value, options)\r\n ),\r\n );\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Deleting all keys in parallel...', 'keys =', keys);\r\n\r\n await Promise.all(\r\n keys.map(key => this.delete(key)),\r\n );\r\n }\r\n\r\n}\r\n","import { LRUCache } from 'lru-cache';\r\nimport { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface ExistingLRUCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The existing instance of a LRUCache.\r\n */\r\n cache: LRUCache<string, any, () => Promise<any>>;\r\n\r\n /**\r\n * Whether it should call {@link LRUCache#fetch} when `getOrLoad` is called.\r\n *\r\n * For that, {@link LRUCache#fetchMethod} needs to call the context function:\r\n * ```ts\r\n * new LRUCache<string, any, () => Promise<any>>({\r\n * fetchMethod: (_key, _staleValue, options) => options.context(),\r\n * });\r\n * ```\r\n */\r\n shouldUseFetch?: boolean;\r\n}\r\n\r\nexport interface LocalLRUCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The default Time to Live (in seconds)\r\n */\r\n ttl?: number;\r\n\r\n /**\r\n * The maximum amount of items stored\r\n */\r\n max?: number;\r\n}\r\n\r\n/**\r\n * An in-memory cache implementation of a Least-Recently-Used cache eviction algorithm.\r\n *\r\n * It allows setting an expiration time and a limit of cached items.\r\n *\r\n * Once the limit of items is reached, the least recently used items will be purged.\r\n */\r\nexport class LocalLRUCache extends BaseCache {\r\n protected readonly cache: LRUCache<string, any, () => Promise<any>>;\r\n protected shouldUseFetch?: boolean;\r\n\r\n constructor(options: LocalLRUCacheOptions | ExistingLRUCacheOptions = {}) {\r\n super(options);\r\n\r\n if ('cache' in options) {\r\n this.cache = options.cache;\r\n this.shouldUseFetch = options.shouldUseFetch;\r\n } else {\r\n this.cache = new LRUCache<string, any, () => Promise<any>>({\r\n ttl: options.ttl ? options.ttl * 1000 : undefined,\r\n max: options.max || 10_000,\r\n ttlAutopurge: false,\r\n fetchMethod: (_key, _staleValue, options) => options.context(),\r\n });\r\n this.shouldUseFetch = true;\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n override getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n if (!this.shouldUseFetch) {\r\n return super.getOrLoad(key, load, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Running LRUCache\\'s fetch...', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n return this.cache.fetch(key, {\r\n context: load,\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n this.cache.set(key, value, {\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n}\r\n","import { TTLCache } from '@isaacs/ttlcache';\r\nimport { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface ExistingTTLCacheOptions extends BaseCacheOptions {\r\n /**\r\n * Existing instance of a TTLCache\r\n */\r\n cache: TTLCache<string, any>;\r\n}\r\n\r\nexport interface LocalTTLCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The default Time to Live (in seconds)\r\n */\r\n ttl?: number;\r\n\r\n /**\r\n * The maximum amount of items stored\r\n */\r\n max?: number;\r\n}\r\n\r\n/**\r\n * An in-memory cache implementation that allows setting an expiration time and a limit of cached items.\r\n *\r\n * Once the limit of items is reached, the soonest expiring items will be purged.\r\n */\r\nexport class LocalTTLCache extends BaseCache {\r\n protected readonly cache: TTLCache<string, any>;\r\n\r\n constructor(options: LocalTTLCacheOptions | ExistingTTLCacheOptions = {}) {\r\n super(options);\r\n\r\n if ('cache' in options) {\r\n this.cache = options.cache;\r\n } else {\r\n this.cache = new TTLCache<string, any>({\r\n max: options.max,\r\n ttl: options.ttl ? options.ttl * 1000 : undefined,\r\n });\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n this.cache.set(key, value, {\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface LocalMapCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying map.\r\n */\r\n cache?: MapLike<string, any>;\r\n\r\n /**\r\n * The maximum size of the cache.\r\n * When not set, the cache can grow indefinitely.\r\n */\r\n max?: number;\r\n}\r\n\r\nexport interface MapLike<K, V> {\r\n get(key: K): V | undefined;\r\n set(key: K, value: V): void;\r\n delete(key: K): void;\r\n has(key: K): boolean;\r\n keys(): IterableIterator<K>;\r\n size: number;\r\n clear(): void;\r\n}\r\n\r\n/**\r\n * A simple in-memory cache implementation based on {@link Map}.\r\n *\r\n * It ignores expiration times, but a limit of cached items can be set.\r\n *\r\n * Once the limit of items is reached, the first inserted keys will be purged.\r\n */\r\nexport class LocalMapCache extends BaseCache {\r\n protected readonly cache: MapLike<string, any>;\r\n protected max: number;\r\n\r\n constructor(options: LocalMapCacheOptions = {}) {\r\n super(options);\r\n this.cache = options.cache ?? new Map<string, any>();\r\n this.max = options.max ?? Infinity;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n if (this.cache.size >= this.max && !this.cache.has(key)) {\r\n this.evict(1);\r\n }\r\n\r\n this.cache.set(key, value);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const entries = Object.entries(data);\r\n\r\n const newEntries = entries.filter(([key]) => !this.cache.has(key)).length;\r\n\r\n if (this.cache.size + newEntries > this.max) {\r\n this.evict(this.cache.size + newEntries - this.max);\r\n }\r\n\r\n for (const [key, value] of entries) {\r\n this.cache.set(key, value);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.logger?.debug(this.name, '[clear]');\r\n\r\n this.cache.clear();\r\n }\r\n\r\n protected evict(length: number): void {\r\n const keys = this.cache.keys();\r\n\r\n for (let i = 0; i < length; i++) {\r\n const key = keys.next();\r\n\r\n if (key.done) {\r\n break;\r\n }\r\n\r\n this.logger?.debug(this.name, '[evict]', 'key = ', key);\r\n\r\n this.cache.delete(key.value);\r\n }\r\n }\r\n\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\n/**\r\n * A cache implementation that does nothing.\r\n * It's useful for disabling cache.\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = isCacheEnabled ? new LocalTTLCache() : new NoOpCache();\r\n * ```\r\n */\r\nexport class NoOpCache implements ICache {\r\n constructor() {}\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n return null;\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return {};\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return load();\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {}\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {}\r\n\r\n async delete(key: string): Promise<void> {}\r\n async deleteMany(keys: string[]): Promise<void> {}\r\n\r\n}\r\n","import type { Redis } from 'ioredis';\r\nimport type { Redis as Valkey } from 'iovalkey';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface IORedisCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The ioredis or iovalkey client\r\n */\r\n client: Redis | Valkey;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n\r\n /**\r\n * Indicates whether the Redis server supports the MSETEX command.\r\n *\r\n * {@link IORedisCache#setMany} will use MSETEX if this option is set to `true`.\r\n *\r\n * This option should be set to `true` if the server runs Redis OSS 8.4.0 or above.\r\n * Valkey does not support this yet. (see https://github.com/valkey-io/valkey/issues/2592)\r\n */\r\n isMSETEXSupported?: boolean;\r\n}\r\n\r\n/**\r\n * A Redis cache implementation using ioredis\r\n */\r\nexport class IORedisCache extends BaseCache {\r\n protected readonly client: Redis | Valkey;\r\n protected defaultTTL?: number;\r\n protected isMSETEXSupported?: boolean;\r\n\r\n constructor(options: IORedisCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n this.isMSETEXSupported = options.isMSETEXSupported;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n const raw = JSON.stringify(value);\r\n\r\n if (ttl) {\r\n await this.client.set(key, raw, 'EX', ttl);\r\n } else {\r\n await this.client.set(key, raw);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mget(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n if (!this.isMSETEXSupported) {\r\n return super.setMany(data, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[setMany] Running \"MSETEX\" command...', 'data =', data);\r\n\r\n const entries = Object.entries(data);\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n const raw = entries.flatMap(([key, value]) => [\r\n key,\r\n JSON.stringify(value),\r\n ]);\r\n\r\n await this.client.call('MSETEX', entries.length, ...raw, ...(ttl ? ['EX', ttl] : []));\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import type { RedisClientType, RedisClientPoolType, RedisClusterType, RedisSentinelType } from '@redis/client';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\ntype Redis = RedisClientType | RedisClientPoolType | RedisClusterType | RedisSentinelType;\r\n\r\nexport interface RedisCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The Redis client\r\n */\r\n client: RedisClientType | RedisClientPoolType | RedisClusterType | RedisSentinelType;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n\r\n /**\r\n * Indicates whether the Redis server supports MSETEX command.\r\n *\r\n * {@link RedisCache#setMany} will use MSETEX if this option is set to `true`.\r\n *\r\n * This option should be set to `true` if the server runs Redis OSS 8.4.0 or above.\r\n * Valkey does not support this yet. (see https://github.com/valkey-io/valkey/issues/2592)\r\n */\r\n isMSETEXSupported?: boolean;\r\n}\r\n\r\n/**\r\n * A Redis cache implementation using node-redis\r\n */\r\nexport class RedisCache extends BaseCache {\r\n protected readonly client: Redis;\r\n protected defaultTTL?: number;\r\n protected isMSETEXSupported?: boolean;\r\n\r\n constructor(options: RedisCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n this.isMSETEXSupported = options.isMSETEXSupported;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n { expiration: ttl ? { type: 'EX', value: ttl } : undefined },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mGet(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n if (!this.isMSETEXSupported) {\r\n return super.setMany(data, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[setMany] Running \"MSETEX\" command...', 'data =', data);\r\n\r\n const raw: [string, string][] = [];\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n raw.push([key, JSON.stringify(value)]);\r\n }\r\n\r\n await this.client.mSetEx(\r\n raw,\r\n { expiration: ttl ? { type: 'EX', value: ttl } : undefined },\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport type { BaseClient, GlideClient, GlideClusterClient } from '@valkey/valkey-glide';\r\n\r\nexport interface ValkeyGlideCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The GLIDE client instance\r\n */\r\n client: GlideClient | GlideClusterClient | BaseClient;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Valkey cache implementation using @valkey/valkey-glide\r\n */\r\nexport class ValkeyGlideCache extends BaseCache {\r\n protected readonly client: BaseClient;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: ValkeyGlideCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw.toString()) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n { expiry: ttl ? { type: 'EX' as any, count: ttl } : undefined },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del([key]);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mget(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value.toString()) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import type Memcache from 'memcache';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface MemcacheCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The Memcache client\r\n */\r\n client: Memcache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Memcached cache implementation using Memcache\r\n */\r\nexport class MemcacheCache extends BaseCache {\r\n protected readonly client: Memcache;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: MemcacheCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"get\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"set\" command...', 'key =', key);\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n options?.ttl ?? this.defaultTTL,\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"delete\" command...', 'key =', key);\r\n\r\n await this.client.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"get\" command...', 'keys =', keys);\r\n\r\n const raw = await this.client.gets(keys);\r\n const data: Record<string, T | null> = {};\r\n\r\n raw.forEach((value, key) => {\r\n data[key] = value ? JSON.parse(value) : null;\r\n });\r\n\r\n return data;\r\n }\r\n}\r\n","import type { Client } from 'memjs';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface MemJSCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The memjs client\r\n */\r\n client: Client;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Memcached cache implementation using MemJS\r\n */\r\nexport class MemJSCache extends BaseCache {\r\n protected readonly client: Client;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: MemJSCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"get\" command...', 'key =', key);\r\n\r\n const { value } = await this.client.get(key);\r\n\r\n return value ? JSON.parse(value.toString('utf8')) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"set\" command...', 'key =', key);\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n {\r\n expires: options?.ttl ?? this.defaultTTL,\r\n },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"delete\" command...', 'key =', key);\r\n\r\n await this.client.delete(key);\r\n }\r\n\r\n}\r\n","import type { KVNamespace } from '@cloudflare/workers-types';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface WorkersKVCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The KV namespace (`env.NAMESPACE`)\r\n */\r\n kv: KVNamespace;\r\n\r\n /**\r\n * The amount of time in seconds that a KV result is cached in the global network location it is accessed from.\r\n *\r\n * Increasing this value can improve read performance at the cost of data being stale.\r\n *\r\n * @see https://developers.cloudflare.com/kv/api/read-key-value-pairs/#cachettl-parameter\r\n */\r\n edgeCacheTTL?: number;\r\n}\r\n\r\n/**\r\n * A Cloudflare Workers KV cache implementation.\r\n */\r\nexport class WorkersKVCache extends BaseCache {\r\n protected readonly kv: KVNamespace;\r\n protected edgeCacheTTL?: number;\r\n\r\n constructor(options: WorkersKVCacheOptions) {\r\n super(options);\r\n this.kv = options.kv;\r\n this.edgeCacheTTL = options.edgeCacheTTL;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.kv.get<T>(key, { type: 'json', cacheTtl: this.edgeCacheTTL });\r\n }\r\n\r\n set<T>(key: string, value: T, options: SetCacheOptions = {}): Promise<void> {\r\n return this.kv.put(key, JSON.stringify(value), { expirationTtl: options.ttl });\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.kv.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const data = await this.kv.get<T>(keys, { type: 'json' });\r\n\r\n return Object.fromEntries(data);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport type Keyv from 'keyv';\r\n\r\nexport interface KeyvCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying key-value store\r\n */\r\n keyv: Keyv;\r\n}\r\n\r\nexport class KeyvCache extends BaseCache {\r\n protected readonly keyv: Keyv;\r\n\r\n constructor(options: KeyvCacheOptions) {\r\n super(options);\r\n this.keyv = options.keyv;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const result = await this.keyv.get<T>(key);\r\n\r\n return result === undefined ? null : result;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n await this.keyv.set(key, value, options?.ttl);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n await this.keyv.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const data = await this.keyv.getMany(keys);\r\n const result: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n result[keys[i]] = data[i] === undefined ? null : data[i];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n override async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n const ttl = options?.ttl;\r\n\r\n await this.keyv.setMany(\r\n Object.entries(data).map(([key, value]) => ({\r\n key,\r\n value,\r\n ttl,\r\n })),\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n await this.keyv.deleteMany(keys);\r\n }\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface AsyncLazyCacheOptions {\r\n /**\r\n * A factory function that will be called to create the underlying cache when needed.\r\n */\r\n factory: () => Promise<ICache> | ICache;\r\n\r\n /**\r\n * Whether it should initialize only when needed.\r\n *\r\n * - When set to `true`, it will initialize the cache only when a method is called.\r\n * - When set to `false`, it will initialize the cache upon construction.\r\n *\r\n * @default `false`\r\n */\r\n lazy?: boolean;\r\n}\r\n\r\n/**\r\n * A cache layer that initializes the underlying cache asynchronously.\r\n *\r\n * This layer can be used to connect to an external cache with the cache methods already available.\r\n *\r\n * This layer can also be used to lazily initialize the cache only when it's actually needed.\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new AsyncCache({\r\n * factory: async () => {\r\n * const redisClient = await createClient({\r\n * url: \"redis://user:password@localhost:6380\",\r\n * });\r\n *\r\n * return new RedisCache({ client: redisClient });\r\n * },\r\n * lazy: true,\r\n * });\r\n *\r\n * cache.get(\"key\")\r\n * .then(result => console.log('redis was connected and read the key:', value));\r\n * ```\r\n */\r\nexport class AsyncLazyCache implements ICache {\r\n protected readonly factory: () => Promise<ICache> | ICache;\r\n protected cache: Promise<ICache> | null = null;\r\n\r\n constructor(options: AsyncLazyCacheOptions) {\r\n this.factory = options.factory;\r\n\r\n if (!options.lazy) {\r\n this.cache = Promise.resolve(this.factory());\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n return (await this.resolveCache()).get<T>(key);\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return (await this.resolveCache()).getOrLoad<T>(key, load, options);\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return (await this.resolveCache()).set<T>(key, value, options);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n return (await this.resolveCache()).delete(key);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return (await this.resolveCache()).getMany<T>(keys);\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return (await this.resolveCache()).setMany<T>(data, options);\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n return (await this.resolveCache()).deleteMany(keys);\r\n }\r\n\r\n /**\r\n * Gets the underlying cache, initializing it if not already initialized.\r\n */\r\n public resolveCache(): Promise<ICache> {\r\n if (!this.cache) {\r\n this.cache = Promise.resolve(this.factory());\r\n }\r\n\r\n return this.cache;\r\n }\r\n\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.d.ts';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\n/**\r\n * The options to construct the {@link CoalescingCache}\r\n */\r\nexport interface CoalescingCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface OngoingRequest {\r\n promise: Promise<any | null>;\r\n type: 'get' | 'getOrLoad';\r\n}\r\n\r\n/**\r\n * A cache strategy layer that deduplicates parallel requests into a single request.\r\n *\r\n * This strategy can prevent the Thundering Herd problem as all parallel requests will be coalesced into one.\r\n */\r\nexport class CoalescingCache implements ICache {\r\n protected readonly ongoingRequests: Map<string, OngoingRequest> = new Map();\r\n protected readonly cache: ICache;\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n\r\n constructor(options: CoalescingCacheOptions) {\r\n this.cache = options.cache;\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n if (ongoingRequest) {\r\n this.logger?.debug(this.name, '[get] Returning ongoing request...', 'key =', key);\r\n\r\n return ongoingRequest.promise;\r\n }\r\n\r\n this.logger?.debug(this.name, '[get] Reading from underlying cache...', 'key =', key);\r\n\r\n const promise = this.cache.get<T>(key);\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'get' });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n // When there's no ongoing requests, we'll do a new one\r\n if (!ongoingRequest) {\r\n this.logger?.debug(this.name, '[getOrLoad] Reading from the underlying cache...', 'key =', key);\r\n\r\n const promise = this.cache.getOrLoad(key, load, options);\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'getOrLoad' });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n // We'll await the ongoing request\r\n let request = await ongoingRequest.promise;\r\n\r\n // When the request is successful or the type is already getOrLoad, we'll just return it\r\n if (request !== null || ongoingRequest.type === 'getOrLoad') {\r\n this.logger?.debug(this.name, '[getOrLoad] Read from an ongoing request.', 'key =', key);\r\n\r\n return request;\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing the cache...', 'key =', key);\r\n\r\n // Otherwise, we'll load it manually\r\n const promise = load();\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'getOrLoad' });\r\n\r\n try {\r\n request = await promise;\r\n\r\n // When the request is successful, we'll store it in cache\r\n if (request !== null) {\r\n await this.cache.set(key, request, options);\r\n }\r\n } finally {\r\n // We'll only delete from \"ongoing requests\" when we finish saving it\r\n this.ongoingRequests.delete(key);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const promise = this.cache.set<T>(key, value, options);\r\n\r\n this.ongoingRequests.set(key, {\r\n promise: promise.then(() => value),\r\n type: 'getOrLoad',\r\n });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n try {\r\n this.ongoingRequests.set(key, {\r\n type: 'get',\r\n promise: Promise.resolve(null),\r\n });\r\n\r\n await this.cache.delete(key);\r\n } finally {\r\n this.ongoingRequests.delete(key);\r\n }\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const items: [string, Promise<T | null>][] = [];\r\n const remainingKeys: string[] = [];\r\n\r\n for (const key of keys) {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n if (ongoingRequest) {\r\n items.push([key, ongoingRequest.promise]);\r\n } else {\r\n remainingKeys.push(key);\r\n }\r\n }\r\n\r\n this.logger?.debug(this.name, '[getMany]', items.length, 'ongoing requests found, reading', remainingKeys.length, 'resources.', 'keys =', keys);\r\n\r\n if (remainingKeys.length > 0) {\r\n const promise = this.cache.getMany<T>(remainingKeys);\r\n\r\n for (const key of remainingKeys) {\r\n const itemPromise = promise\r\n .then(data => data[key]!)\r\n .finally(() => this.ongoingRequests.delete(key));\r\n\r\n this.ongoingRequests.set(key, {\r\n promise: itemPromise,\r\n type: 'get',\r\n });\r\n\r\n items.push([key, itemPromise]);\r\n }\r\n }\r\n\r\n return Object.fromEntries(\r\n await Promise.all(\r\n items.map(async ([key, promise]) => [key, await promise])\r\n ),\r\n );\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const promise = this.cache.setMany(data, options);\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n this.ongoingRequests.set(key, {\r\n promise: promise.then(() => value).finally(() => this.ongoingRequests.delete(key)),\r\n type: 'getOrLoad',\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany]', 'keys =', keys);\r\n\r\n try {\r\n for (const key of keys) {\r\n this.ongoingRequests.set(key, {\r\n type: 'get',\r\n promise: Promise.resolve(null),\r\n });\r\n }\r\n\r\n await this.cache.deleteMany(keys);\r\n } finally {\r\n for (const key of keys) {\r\n this.ongoingRequests.delete(key);\r\n }\r\n }\r\n\r\n }\r\n\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface JitteringCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL: number;\r\n\r\n /**\r\n * The maximum jitter (in seconds) to add to the TTL of cached items.\r\n */\r\n maxJitterTTL: number;\r\n}\r\n\r\n/**\r\n * A cache layer that adds a random jitter to the TTL of cached items to prevent cache stampedes.\r\n *\r\n * This layer is useful in scenarios where many cached items expire simultaneously, causing a sudden surge of requests to the underlying data source.\r\n */\r\nexport class JitteringCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected defaultTTL: number;\r\n protected maxJitterTTL: number;\r\n\r\n constructor(options: JitteringCacheOptions) {\r\n this.cache = options.cache;\r\n this.defaultTTL = options.defaultTTL;\r\n this.maxJitterTTL = options.maxJitterTTL;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.cache.get<T>(key);\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options: SetCacheOptions = {}): Promise<T> {\r\n return this.cache.getOrLoad<T>(key, load, this.jitterTTL(options));\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.set<T>(key, value, this.jitterTTL(options));\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.cache.delete(key);\r\n }\r\n\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return this.cache.getMany(keys);\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.setMany(data, this.jitterTTL(options));\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n return this.cache.deleteMany(keys);\r\n }\r\n\r\n protected jitterTTL(options: SetCacheOptions = {}): SetCacheOptions {\r\n const ttl = options.ttl ?? this.defaultTTL;\r\n const jitter = Math.random() * this.maxJitterTTL;\r\n\r\n return {\r\n ...options,\r\n ttl: ttl + jitter,\r\n };\r\n }\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\ninterface BaseKeyTransformingCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface KeyTransformerFnCacheOptions extends BaseKeyTransformingCacheOptions {\r\n /**\r\n * The function that will be called with each key to transform it.\r\n * @param key The original key\r\n * @return The transformed key\r\n */\r\n transform: (key: string) => string;\r\n prefix?: never;\r\n suffix?: never;\r\n}\r\n\r\ninterface KeyAffixCacheOptions extends BaseKeyTransformingCacheOptions {\r\n /**\r\n * The prefix to add to keys\r\n */\r\n prefix?: string;\r\n\r\n /**\r\n * The suffix to add to keys\r\n */\r\n suffix?: string;\r\n}\r\n\r\nexport type KeyTransformingCacheOptions = KeyAffixCacheOptions | KeyTransformerFnCacheOptions;\r\n\r\n/**\r\n * A cache layer that changes keys before passing them to the underlying cache.\r\n *\r\n * This layer can be used to:\r\n * - Create namespaced caches, avoiding conflicts with shared cache servers.\r\n * - Add a version number, allowing schema changes without causing incompatibility.\r\n * - Implement any other key transformations, such as normalizing or hashing.\r\n */\r\nexport class KeyTransformingCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected transform: (key: string) => string;\r\n\r\n constructor(options: KeyTransformingCacheOptions) {\r\n this.cache = options.cache;\r\n\r\n if ('transform' in options) {\r\n this.transform = options.transform;\r\n } else {\r\n const prefix = options.prefix || '';\r\n const suffix = options.suffix || '';\r\n this.transform = (key: string) => `${prefix}${key}${suffix}`;\r\n }\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.cache.get<T>(this.transform(key));\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return this.cache.getOrLoad(this.transform(key), load, options);\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.set(this.transform(key), value, options);\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.cache.delete(this.transform(key));\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const transformedKeys = keys.map(key => this.transform(key));\r\n const data = await this.cache.getMany<T>(transformedKeys);\r\n\r\n return Object.fromEntries(\r\n Object.entries(data).map(([transformedKey, value]) => [\r\n keys[transformedKeys.indexOf(transformedKey)],\r\n value,\r\n ]),\r\n );\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.setMany(\r\n Object.fromEntries(\r\n Object.entries(data).map(([key, value]) => [this.transform(key), value]),\r\n ),\r\n options,\r\n )\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n return this.cache.deleteMany(keys.map(key => this.transform(key)));\r\n }\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\n/**\r\n * The options to create the {@link SWRCache}\r\n */\r\nexport interface SWRCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL: number;\r\n\r\n /**\r\n * The additional time in seconds to keep the resource stored, but consider it as stale\r\n */\r\n staleTTL: number;\r\n}\r\n\r\ninterface CachedItem<T> {\r\n data: T;\r\n expiresAt: number;\r\n}\r\n\r\n/**\r\n * A cache strategy that returns stale resources immediately while it refreshes the cache in background.\r\n *\r\n * This is an implementation of the Stale-While-Revalidate algorithm.\r\n *\r\n * This strategy is only effective when calling {@link ICache#getOrLoad}.\r\n */\r\nexport class SWRCache implements ICache {\r\n protected readonly revalidating: Map<string, Promise<any>> = new Map<string, Promise<any>>();\r\n protected readonly cache: ICache;\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n protected defaultTTL: number;\r\n protected staleTTL: number;\r\n\r\n constructor(options: SWRCacheOptions) {\r\n this.cache = options.cache;\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n this.defaultTTL = options.defaultTTL;\r\n this.staleTTL = options.staleTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const item = await this.cache.get<CachedItem<T>>(key);\r\n\r\n return item ? item.data : null;\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options: SetCacheOptions = {}): Promise<T> {\r\n this.logger?.debug(this.name, '[getOrLoad]', 'key =', key);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const cacheOptions = {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n };\r\n\r\n const loadItem = async (): Promise<CachedItem<T>> => ({\r\n data: await load(),\r\n expiresAt: Date.now() + ttl * 1000,\r\n });\r\n\r\n const item = await this.cache.getOrLoad<CachedItem<T>>(key, loadItem, cacheOptions);\r\n\r\n // The item is stale, we'll revalidate in background\r\n if (item && item.expiresAt < Date.now() && !this.revalidating.has(key)) {\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing stale resource in background...', 'key =', key);\r\n\r\n const promise = loadItem()\r\n .then(newItem => this.cache.set(key, newItem, cacheOptions))\r\n .finally(() => this.revalidating.delete(key));\r\n\r\n this.revalidating.set(key, promise);\r\n }\r\n\r\n return item.data;\r\n }\r\n\r\n set<T>(key: string, value: T, options: SetCacheOptions = {}): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const item: CachedItem<T> = {\r\n data: value,\r\n expiresAt: Date.now() + ttl * 1000,\r\n };\r\n const cacheOptions = {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n };\r\n\r\n return this.cache.set(key, item, cacheOptions);\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n return this.cache.delete(key);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany]', 'keys =', keys);\r\n\r\n const data = await this.cache.getMany<CachedItem<T>>(keys);\r\n const items: Record<string, T | null> = {};\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n items[key] = value ? value.data : null;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options: SetCacheOptions = {}): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const items: Record<string, CachedItem<T>> = {};\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n items[key] = {\r\n data: value,\r\n expiresAt: Date.now() + ttl * 1000,\r\n };\r\n }\r\n\r\n return this.cache.setMany(items, {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n });\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany]', 'keys =', keys);\r\n\r\n return this.cache.deleteMany(keys);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface TieredCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The list of tiers in order of priority.\r\n *\r\n * The first item represents the \"hot\" cache while the last one represents a \"cold\" cache.\r\n */\r\n tiers: CacheTier[];\r\n}\r\n\r\nexport interface CacheTier {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The options that will be passed to {@link ICache#getOrLoad}, {@link ICache#set} and {@link ICache#setMany}.\r\n */\r\n options?: SetCacheOptions;\r\n}\r\n\r\n/**\r\n * A cache strategy layer that implements multi-level caching\r\n *\r\n * The objective of a tiered cache is to minimize latency while still having the benefits of a larger, shared cache.\r\n * This is done by having the first tier being an in-memory cache (such as {@link LocalTTLCache}) that stores a small amount of items with a short TTL,\r\n * and the second tier being an external cache (such as {@link RedisCache}) that stores a lot more items and may have a longer TTL.\r\n *\r\n * This strategy is similarly known as Cache Hierarchy, CPU cache or L1/L2/L3 cache.\r\n */\r\nexport class TieredCache extends BaseCache {\r\n protected readonly tiers: CacheTier[];\r\n\r\n constructor(options: TieredCacheOptions) {\r\n super(options);\r\n this.tiers = options.tiers;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const next = (i: number): Promise<T | null> => {\r\n this.logger?.debug(this.name, '[get] Reading from tier =', i, 'key =', key);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n if (isLastTier) {\r\n return tier.cache.get<T>(key);\r\n }\r\n\r\n return tier.cache.getOrLoad(key, () => next(i + 1), tier.options);\r\n };\r\n\r\n return next(0);\r\n }\r\n\r\n override async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n const next = (i: number): Promise<T> => {\r\n this.logger?.debug(this.name, '[getOrLoad] Reading from tier =', i, 'key =', key);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n if (isLastTier) {\r\n return tier.cache.getOrLoad(key, load, options || tier.options);\r\n }\r\n\r\n return tier.cache.getOrLoad(key, () => next(i + 1), tier.options);\r\n };\r\n\r\n return next(0);\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Writing to all tiers in parallel...', 'key =', key);\r\n\r\n await Promise.all(\r\n this.tiers.map((tier, i) => {\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n return tier.cache.set(key, value, isLastTier ? (options || tier.options) : tier.options);\r\n }),\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Deleting from all tiers in parallel...', 'key =', key);\r\n\r\n await Promise.all(\r\n this.tiers.map(tier => tier.cache.delete(key)),\r\n );\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const next = async (i: number, remainingKeys: string[]): Promise<Record<string, T | null>> => {\r\n this.logger?.debug(this.name, '[getMany] Reading from tier =', i, 'keys =', keys);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n const items = await tier.cache.getMany<T>(remainingKeys);\r\n\r\n remainingKeys = Object.entries(items)\r\n .filter(([, value]) => value === null || value === undefined)\r\n .map(([key]) => key);\r\n\r\n if (isLastTier || remainingKeys.length === 0) {\r\n return items;\r\n }\r\n\r\n const nextItems = await next(i + 1, remainingKeys);\r\n\r\n const backfillItems = Object.entries(nextItems)\r\n .filter(([, value]) => value !== null && value !== undefined);\r\n\r\n if (backfillItems.length > 0) {\r\n await tier.cache.setMany(Object.fromEntries(backfillItems), tier.options);\r\n }\r\n\r\n return {\r\n ...items,\r\n ...nextItems,\r\n };\r\n };\r\n\r\n return next(0, keys);\r\n }\r\n\r\n override async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany] Writing to all tiers in parallel...', 'data =', data);\r\n\r\n await Promise.all(\r\n this.tiers.map((tier, i) => {\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n return tier.cache.setMany(data, isLastTier ? (options || tier.options) : tier.options);\r\n }),\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Deleting from all tiers in parallel...', 'keys =', keys);\r\n\r\n await Promise.all(\r\n this.tiers.map(tier => tier.cache.deleteMany(keys)),\r\n );\r\n }\r\n\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\nexport interface MetricsCollectingCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface CacheCountMetrics {\r\n /** Amount of times the cache didn't have the requested resource */\r\n missCount: number;\r\n\r\n /** The amount of times the cache returned the requested resource */\r\n hitCount: number;\r\n\r\n /** The amount of times the cache was refreshed (the `load` function was called in {@link ICache#getOrLoad}) */\r\n loadCount: number;\r\n\r\n /** The amount of times the cache was updated */\r\n setCount: number;\r\n\r\n /** The amount of times a cached resource was invalidated */\r\n deleteCount: number;\r\n}\r\n\r\ninterface CacheTimeMetrics {\r\n /** Average time taken to verify that the cache didn't have a single requested resource (in milliseconds) */\r\n missTime: number;\r\n\r\n /** Average time taken to return a single requested resource from cache (in milliseconds) */\r\n hitTime: number;\r\n\r\n /** Average time taken to load a single resource from source (in milliseconds) */\r\n loadTime: number;\r\n\r\n /** Average time taken to update a single resource from cache (in milliseconds) */\r\n setTime: number;\r\n\r\n /** Average time taken to invalidate a single resource from cache (in milliseconds) */\r\n deleteTime: number;\r\n}\r\n\r\nexport type CacheMetrics = CacheCountMetrics & CacheTimeMetrics;\r\n\r\n/**\r\n * A cache layer that collects metrics from each cache call.\r\n *\r\n * This can be useful to measure the cache effectiveness\r\n */\r\nexport class MetricsCollectingCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected readonly logger?: Logger;\r\n protected name?: string;\r\n\r\n protected countMetrics: CacheCountMetrics = {\r\n missCount: 0,\r\n hitCount: 0,\r\n loadCount: 0,\r\n setCount: 0,\r\n deleteCount: 0,\r\n };\r\n protected totalTimeMetrics: CacheTimeMetrics = {\r\n missTime: 0,\r\n hitTime: 0,\r\n loadTime: 0,\r\n setTime: 0,\r\n deleteTime: 0,\r\n };\r\n\r\n constructor(options: MetricsCollectingCacheOptions) {\r\n this.cache = options.cache;\r\n this.logger = options.logger;\r\n this.name = options.name;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const startAt = performance.now();\r\n\r\n const data = await this.cache.get<T>(key);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n if (data === null) {\r\n this.countMetrics.missCount++;\r\n this.totalTimeMetrics.missTime += time;\r\n\r\n this.logger?.debug(this.name, '[get] Cache miss.', 'key =', key, 'timeMS =', time);\r\n } else {\r\n this.countMetrics.hitCount++;\r\n this.totalTimeMetrics.hitTime += time;\r\n\r\n this.logger?.debug(this.name, '[get] Cache hit.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n let didTriggerLoad: boolean = false;\r\n let loadFinishAt: number = 0;\r\n\r\n const loadMiddleware = (): Promise<T> => {\r\n const missFinishAt = performance.now();\r\n\r\n this.countMetrics.missCount++;\r\n this.totalTimeMetrics.missTime += missFinishAt - startAt;\r\n\r\n didTriggerLoad = true;\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Cache refresh.', 'key =', key);\r\n\r\n const loadStartAt = performance.now();\r\n\r\n return load().finally(() => {\r\n loadFinishAt = performance.now();\r\n\r\n this.countMetrics.loadCount++;\r\n this.totalTimeMetrics.loadTime += loadFinishAt - loadStartAt;\r\n });\r\n };\r\n\r\n let startAt = performance.now();\r\n\r\n const data = await this.cache.getOrLoad<T>(key, loadMiddleware, options);\r\n\r\n if (!didTriggerLoad) {\r\n const hitFinishedAt = performance.now();\r\n\r\n this.countMetrics.hitCount++;\r\n this.totalTimeMetrics.hitTime += hitFinishedAt - startAt;\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Cache hit.', 'key =', key);\r\n } else {\r\n const setFinishAt = performance.now();\r\n\r\n this.countMetrics.setCount++;\r\n this.totalTimeMetrics.setTime += setFinishAt - loadFinishAt;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.set(key, value, options);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.setCount++;\r\n this.totalTimeMetrics.setTime += time;\r\n\r\n this.logger?.debug(this.name, '[set] Cache set.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.delete(key);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.deleteCount++;\r\n this.totalTimeMetrics.deleteTime += time;\r\n\r\n this.logger?.debug(this.name, '[delete] Cache delete.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const startAt = performance.now();\r\n\r\n const data = await this.cache.getMany<T>(keys);\r\n\r\n const time = performance.now() - startAt;\r\n const timePerKey = time / keys.length;\r\n\r\n const miss = keys.filter(key => data[key] === undefined || data[key] === null).length;\r\n const hits = keys.length - miss;\r\n\r\n this.countMetrics.missCount += miss;\r\n this.countMetrics.hitCount += hits;\r\n this.totalTimeMetrics.missTime += miss * timePerKey;\r\n this.totalTimeMetrics.hitTime += hits * timePerKey;\r\n\r\n this.logger?.debug(this.name, '[getMany]', 'hits =', hits, 'misses = ', miss, 'timeMS =', time);\r\n\r\n return data;\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.setMany(data, options);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n const sets = Object.keys(data).length;\r\n\r\n this.countMetrics.setCount += sets;\r\n this.totalTimeMetrics.setTime += time;\r\n\r\n this.logger?.debug(this.name, '[setMany]', 'sets =', sets, 'timeMS =', time);\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.deleteMany(keys);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.deleteCount += keys.length;\r\n this.totalTimeMetrics.deleteTime += time;\r\n\r\n this.logger?.debug(this.name, '[deleteMany]', 'deletes =', keys.length, 'timeMS =', time);\r\n }\r\n\r\n getMetrics(): CacheMetrics {\r\n const count = this.countMetrics;\r\n const time = this.totalTimeMetrics;\r\n\r\n return {\r\n ...count,\r\n missTime: count.missCount === 0 ? 0 : time.missTime / count.missCount,\r\n hitTime: count.hitCount === 0 ? 0 : time.hitTime / count.hitCount,\r\n loadTime: count.loadCount === 0 ? 0 : time.loadTime / count.loadCount,\r\n setTime: count.setCount === 0 ? 0 : time.setTime / count.setCount,\r\n deleteTime: count.deleteCount === 0 ? 0 : time.deleteTime / count.deleteCount,\r\n };\r\n }\r\n\r\n resetMetrics(): void {\r\n this.countMetrics = {\r\n missCount: 0,\r\n hitCount: 0,\r\n loadCount: 0,\r\n setCount: 0,\r\n deleteCount: 0,\r\n };\r\n this.totalTimeMetrics = {\r\n missTime: 0,\r\n hitTime: 0,\r\n loadTime: 0,\r\n setTime: 0,\r\n deleteTime: 0,\r\n };\r\n\r\n this.logger?.debug(this.name, '[resetMetrics]');\r\n }\r\n\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["options","data: Record<string, T | null>","data: Record<string, T | null>","raw: [string, string][]","data: Record<string, T | null>","data: Record<string, T | null>","result: Record<string, T | null>","promise","items: [string, Promise<T | null>][]","remainingKeys: string[]","item: CachedItem<T>","items: Record<string, T | null>","items: Record<string, CachedItem<T>>","didTriggerLoad: boolean","loadFinishAt: number"],"sources":["../src/base/index.ts","../src/local/lru/index.ts","../src/local/ttl/index.ts","../src/local/map/index.ts","../src/local/noop/index.ts","../src/remote/ioredis/index.ts","../src/remote/redis/index.ts","../src/remote/valkey-glide/index.ts","../src/remote/memcache/index.ts","../src/remote/memjs/index.ts","../src/remote/workers-kv/index.ts","../src/remote/keyv/index.ts","../src/layers/async-lazy/index.ts","../src/layers/coalescing/index.ts","../src/layers/jittering/index.ts","../src/layers/key-transforming/index.ts","../src/layers/swr/index.ts","../src/layers/tiered/index.ts","../src/layers/metrics/index.ts"],"sourcesContent":["import type { BaseCacheOptions, ICache, SetCacheOptions } from '../types/cache.js';\r\nimport type { Logger } from '../types/logger.js';\r\n\r\n/**\r\n * The base implementation of a cache.\r\n *\r\n * This class only requires subclasses to implement {@link ICache#get}, {@link ICache#set} and {@link ICache#delete}.\r\n * All other methods fall back into these three.\r\n */\r\nexport abstract class BaseCache implements ICache {\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n\r\n protected constructor(options: BaseCacheOptions) {\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n }\r\n\r\n abstract get<T>(key: string): Promise<T | null>;\r\n\r\n abstract set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void>;\r\n\r\n abstract delete(key: string): Promise<void>;\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n let data = await this.get<T>(key);\r\n\r\n if (data !== null) {\r\n this.logger?.debug(this.name, '[getOrLoad] Returning from cache.', 'key =', key);\r\n\r\n return data;\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing the cache...', 'key =', key);\r\n\r\n data = await load();\r\n\r\n await this.set(key, data, options);\r\n\r\n return data;\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Reading all keys in parallel...', 'keys =', keys);\r\n\r\n return Object.fromEntries(\r\n await Promise.all(\r\n keys.map(async key => [key, await this.get<any>(key)]),\r\n ),\r\n );\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany] Writing all keys in parallel...', 'data =', data);\r\n\r\n await Promise.all(\r\n Object.entries(data).map(([key, value]) =>\r\n this.set(key, value, options)\r\n ),\r\n );\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Deleting all keys in parallel...', 'keys =', keys);\r\n\r\n await Promise.all(\r\n keys.map(key => this.delete(key)),\r\n );\r\n }\r\n\r\n}\r\n","import { LRUCache } from 'lru-cache';\r\nimport { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface ExistingLRUCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The existing instance of a LRUCache.\r\n */\r\n cache: LRUCache<string, any, () => Promise<any>>;\r\n\r\n /**\r\n * Whether it should call {@link LRUCache#fetch} when `getOrLoad` is called.\r\n *\r\n * For that, {@link LRUCache#fetchMethod} needs to call the context function:\r\n * ```ts\r\n * new LRUCache<string, any, () => Promise<any>>({\r\n * fetchMethod: (_key, _staleValue, options) => options.context(),\r\n * });\r\n * ```\r\n */\r\n shouldUseFetch?: boolean;\r\n}\r\n\r\nexport interface LocalLRUCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The default Time to Live (in seconds)\r\n */\r\n ttl?: number;\r\n\r\n /**\r\n * The maximum amount of items stored\r\n */\r\n max?: number;\r\n}\r\n\r\n/**\r\n * An in-memory cache implementation of a Least-Recently-Used cache eviction algorithm.\r\n *\r\n * It allows setting an expiration time and a limit of cached items.\r\n *\r\n * Once the limit of items is reached, the least recently used items will be purged.\r\n */\r\nexport class LocalLRUCache extends BaseCache {\r\n protected readonly cache: LRUCache<string, any, () => Promise<any>>;\r\n protected shouldUseFetch?: boolean;\r\n\r\n constructor(options: LocalLRUCacheOptions | ExistingLRUCacheOptions = {}) {\r\n super(options);\r\n\r\n if ('cache' in options) {\r\n this.cache = options.cache;\r\n this.shouldUseFetch = options.shouldUseFetch;\r\n } else {\r\n this.cache = new LRUCache<string, any, () => Promise<any>>({\r\n ttl: options.ttl ? options.ttl * 1000 : undefined,\r\n max: options.max || 10_000,\r\n ttlAutopurge: false,\r\n fetchMethod: (_key, _staleValue, options) => options.context(),\r\n });\r\n this.shouldUseFetch = true;\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n override getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n if (!this.shouldUseFetch) {\r\n return super.getOrLoad(key, load, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Running LRUCache\\'s fetch...', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n return this.cache.fetch(key, {\r\n context: load,\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n this.cache.set(key, value, {\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n}\r\n","import { TTLCache } from '@isaacs/ttlcache';\r\nimport { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface ExistingTTLCacheOptions extends BaseCacheOptions {\r\n /**\r\n * Existing instance of a TTLCache\r\n */\r\n cache: TTLCache<string, any>;\r\n}\r\n\r\nexport interface LocalTTLCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The default Time to Live (in seconds)\r\n */\r\n ttl?: number;\r\n\r\n /**\r\n * The maximum amount of items stored\r\n */\r\n max?: number;\r\n}\r\n\r\n/**\r\n * An in-memory cache implementation that allows setting an expiration time and a limit of cached items.\r\n *\r\n * Once the limit of items is reached, the soonest expiring items will be purged.\r\n */\r\nexport class LocalTTLCache extends BaseCache {\r\n protected readonly cache: TTLCache<string, any>;\r\n\r\n constructor(options: LocalTTLCacheOptions | ExistingTTLCacheOptions = {}) {\r\n super(options);\r\n\r\n if ('cache' in options) {\r\n this.cache = options.cache;\r\n } else {\r\n this.cache = new TTLCache<string, any>({\r\n max: options.max,\r\n ttl: options.ttl ? options.ttl * 1000 : undefined,\r\n });\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options?.ttl;\r\n\r\n this.cache.set(key, value, {\r\n ttl: ttl ? ttl * 1000 : undefined,\r\n });\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface LocalMapCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying map.\r\n */\r\n cache?: MapLike<string, any>;\r\n\r\n /**\r\n * The maximum size of the cache.\r\n * When not set, the cache can grow indefinitely.\r\n */\r\n max?: number;\r\n}\r\n\r\nexport interface MapLike<K, V> {\r\n get(key: K): V | undefined;\r\n set(key: K, value: V): void;\r\n delete(key: K): void;\r\n has(key: K): boolean;\r\n keys(): IterableIterator<K>;\r\n size: number;\r\n clear(): void;\r\n}\r\n\r\n/**\r\n * A simple in-memory cache implementation based on {@link Map}.\r\n *\r\n * It ignores expiration times, but a limit of cached items can be set.\r\n *\r\n * It implements a simple FIFO eviction policy:\r\n * Once the limit of items is reached, the first inserted keys will be purged.\r\n */\r\nexport class LocalMapCache extends BaseCache {\r\n protected readonly cache: MapLike<string, any>;\r\n protected max: number;\r\n\r\n constructor(options: LocalMapCacheOptions = {}) {\r\n super(options);\r\n this.cache = options.cache ?? new Map<string, any>();\r\n this.max = options.max ?? Infinity;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const data = this.cache.get(key);\r\n\r\n return data === undefined ? null : data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n if (this.cache.size >= this.max && !this.cache.has(key)) {\r\n this.evict(1);\r\n }\r\n\r\n this.cache.set(key, value);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n this.cache.delete(key);\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const entries = Object.entries(data);\r\n\r\n const newEntries = entries.filter(([key]) => !this.cache.has(key)).length;\r\n\r\n if (this.cache.size + newEntries > this.max) {\r\n this.evict(this.cache.size + newEntries - this.max);\r\n }\r\n\r\n for (const [key, value] of entries) {\r\n this.cache.set(key, value);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.logger?.debug(this.name, '[clear]');\r\n\r\n this.cache.clear();\r\n }\r\n\r\n protected evict(length: number): void {\r\n const keys = this.cache.keys();\r\n\r\n for (let i = 0; i < length; i++) {\r\n const key = keys.next();\r\n\r\n if (key.done) {\r\n break;\r\n }\r\n\r\n this.logger?.debug(this.name, '[evict]', 'key = ', key);\r\n\r\n this.cache.delete(key.value);\r\n }\r\n }\r\n\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\n/**\r\n * A cache implementation that does nothing.\r\n * It's useful for disabling cache.\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = isCacheEnabled ? new LocalTTLCache() : new NoOpCache();\r\n * ```\r\n */\r\nexport class NoOpCache implements ICache {\r\n constructor() {}\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n return null;\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return {};\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return load();\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {}\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {}\r\n\r\n async delete(key: string): Promise<void> {}\r\n async deleteMany(keys: string[]): Promise<void> {}\r\n\r\n}\r\n","import type { Redis } from 'ioredis';\r\nimport type { Redis as Valkey } from 'iovalkey';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface IORedisCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The ioredis or iovalkey client\r\n */\r\n client: Redis | Valkey;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n\r\n /**\r\n * Indicates whether the Redis server supports the MSETEX command.\r\n *\r\n * {@link IORedisCache#setMany} will use MSETEX if this option is set to `true`.\r\n *\r\n * This option should be set to `true` if the server runs Redis OSS 8.4.0 or above.\r\n * Valkey does not support this yet. (see https://github.com/valkey-io/valkey/issues/2592)\r\n */\r\n isMSETEXSupported?: boolean;\r\n}\r\n\r\n/**\r\n * A Redis cache implementation using ioredis\r\n */\r\nexport class IORedisCache extends BaseCache {\r\n protected readonly client: Redis | Valkey;\r\n protected defaultTTL?: number;\r\n protected isMSETEXSupported?: boolean;\r\n\r\n constructor(options: IORedisCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n this.isMSETEXSupported = options.isMSETEXSupported;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n const raw = JSON.stringify(value);\r\n\r\n if (ttl) {\r\n await this.client.set(key, raw, 'EX', ttl);\r\n } else {\r\n await this.client.set(key, raw);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mget(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n if (!this.isMSETEXSupported) {\r\n return super.setMany(data, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[setMany] Running \"MSETEX\" command...', 'data =', data);\r\n\r\n const entries = Object.entries(data);\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n const raw = entries.flatMap(([key, value]) => [\r\n key,\r\n JSON.stringify(value),\r\n ]);\r\n\r\n await this.client.call('MSETEX', entries.length, ...raw, ...(ttl ? ['EX', ttl] : []));\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import type { RedisClientType, RedisClientPoolType, RedisClusterType, RedisSentinelType } from '@redis/client';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\ntype Redis = RedisClientType | RedisClientPoolType | RedisClusterType | RedisSentinelType;\r\n\r\nexport interface RedisCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The Redis client\r\n */\r\n client: RedisClientType | RedisClientPoolType | RedisClusterType | RedisSentinelType;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n\r\n /**\r\n * Indicates whether the Redis server supports MSETEX command.\r\n *\r\n * {@link RedisCache#setMany} will use MSETEX if this option is set to `true`.\r\n *\r\n * This option should be set to `true` if the server runs Redis OSS 8.4.0 or above.\r\n * Valkey does not support this yet. (see https://github.com/valkey-io/valkey/issues/2592)\r\n */\r\n isMSETEXSupported?: boolean;\r\n}\r\n\r\n/**\r\n * A Redis cache implementation using node-redis\r\n */\r\nexport class RedisCache extends BaseCache {\r\n protected readonly client: Redis;\r\n protected defaultTTL?: number;\r\n protected isMSETEXSupported?: boolean;\r\n\r\n constructor(options: RedisCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n this.isMSETEXSupported = options.isMSETEXSupported;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n { expiration: ttl ? { type: 'EX', value: ttl } : undefined },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mGet(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async setMany(data: Record<string, any>, options?: SetCacheOptions): Promise<void> {\r\n if (!this.isMSETEXSupported) {\r\n return super.setMany(data, options);\r\n }\r\n\r\n this.logger?.debug(this.name, '[setMany] Running \"MSETEX\" command...', 'data =', data);\r\n\r\n const raw: [string, string][] = [];\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n raw.push([key, JSON.stringify(value)]);\r\n }\r\n\r\n await this.client.mSetEx(\r\n raw,\r\n { expiration: ttl ? { type: 'EX', value: ttl } : undefined },\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport type { BaseClient, GlideClient, GlideClusterClient } from '@valkey/valkey-glide';\r\n\r\nexport interface ValkeyGlideCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The GLIDE client instance\r\n */\r\n client: GlideClient | GlideClusterClient | BaseClient;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Valkey cache implementation using @valkey/valkey-glide\r\n */\r\nexport class ValkeyGlideCache extends BaseCache {\r\n protected readonly client: BaseClient;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: ValkeyGlideCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"GET\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw.toString()) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"SET\" command...', 'key =', key);\r\n\r\n const ttl = options?.ttl ?? this.defaultTTL;\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n { expiry: ttl ? { type: 'EX' as any, count: ttl } : undefined },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"DEL\" command...', 'key =', key);\r\n\r\n await this.client.del([key]);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"MGET\" command...', 'keys =', keys);\r\n\r\n const values = await this.client.mget(keys);\r\n\r\n const data: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = values[i];\r\n\r\n data[keys[i]!] = value ? JSON.parse(value.toString()) : null;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Running \"DEL\" command...', 'keys =', keys);\r\n\r\n await this.client.del(keys);\r\n }\r\n\r\n}\r\n","import type Memcache from 'memcache';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface MemcacheCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The Memcache client\r\n */\r\n client: Memcache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Memcached cache implementation using Memcache\r\n */\r\nexport class MemcacheCache extends BaseCache {\r\n protected readonly client: Memcache;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: MemcacheCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"get\" command...', 'key =', key);\r\n\r\n const raw = await this.client.get(key);\r\n\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"set\" command...', 'key =', key);\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n options?.ttl ?? this.defaultTTL,\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"delete\" command...', 'key =', key);\r\n\r\n await this.client.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany] Running \"get\" command...', 'keys =', keys);\r\n\r\n const raw = await this.client.gets(keys);\r\n const data: Record<string, T | null> = {};\r\n\r\n raw.forEach((value, key) => {\r\n data[key] = value ? JSON.parse(value) : null;\r\n });\r\n\r\n return data;\r\n }\r\n}\r\n","import type { Client } from 'memjs';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface MemJSCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The memjs client\r\n */\r\n client: Client;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL?: number;\r\n}\r\n\r\n/**\r\n * A Memcached cache implementation using MemJS\r\n */\r\nexport class MemJSCache extends BaseCache {\r\n protected readonly client: Client;\r\n protected defaultTTL?: number;\r\n\r\n constructor(options: MemJSCacheOptions) {\r\n super(options);\r\n this.client = options.client;\r\n this.defaultTTL = options.defaultTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get] Running \"get\" command...', 'key =', key);\r\n\r\n const { value } = await this.client.get(key);\r\n\r\n return value ? JSON.parse(value.toString('utf8')) : null;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Running \"set\" command...', 'key =', key);\r\n\r\n await this.client.set(\r\n key,\r\n JSON.stringify(value),\r\n {\r\n expires: options?.ttl ?? this.defaultTTL,\r\n },\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Running \"delete\" command...', 'key =', key);\r\n\r\n await this.client.delete(key);\r\n }\r\n\r\n}\r\n","import type { KVNamespace } from '@cloudflare/workers-types';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport { BaseCache } from '../../base/index.js';\r\n\r\nexport interface WorkersKVCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The KV namespace (`env.NAMESPACE`)\r\n */\r\n kv: KVNamespace;\r\n\r\n /**\r\n * The amount of time in seconds that a KV result is cached in the global network location it is accessed from.\r\n *\r\n * Increasing this value can improve read performance at the cost of data being stale.\r\n *\r\n * @see https://developers.cloudflare.com/kv/api/read-key-value-pairs/#cachettl-parameter\r\n */\r\n edgeCacheTTL?: number;\r\n}\r\n\r\n/**\r\n * A Cloudflare Workers KV cache implementation.\r\n */\r\nexport class WorkersKVCache extends BaseCache {\r\n protected readonly kv: KVNamespace;\r\n protected edgeCacheTTL?: number;\r\n\r\n constructor(options: WorkersKVCacheOptions) {\r\n super(options);\r\n this.kv = options.kv;\r\n this.edgeCacheTTL = options.edgeCacheTTL;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.kv.get<T>(key, { type: 'json', cacheTtl: this.edgeCacheTTL });\r\n }\r\n\r\n set<T>(key: string, value: T, options: SetCacheOptions = {}): Promise<void> {\r\n return this.kv.put(key, JSON.stringify(value), { expirationTtl: options.ttl });\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.kv.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const data = await this.kv.get<T>(keys, { type: 'json' });\r\n\r\n return Object.fromEntries(data);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, SetCacheOptions } from '../../types/cache.js';\r\nimport type Keyv from 'keyv';\r\n\r\nexport interface KeyvCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying key-value store\r\n */\r\n keyv: Keyv;\r\n}\r\n\r\nexport class KeyvCache extends BaseCache {\r\n protected readonly keyv: Keyv;\r\n\r\n constructor(options: KeyvCacheOptions) {\r\n super(options);\r\n this.keyv = options.keyv;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const result = await this.keyv.get<T>(key);\r\n\r\n return result === undefined ? null : result;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n await this.keyv.set(key, value, options?.ttl);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n await this.keyv.delete(key);\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const data = await this.keyv.getMany(keys);\r\n const result: Record<string, T | null> = {};\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n result[keys[i]] = data[i] === undefined ? null : data[i];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n override async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n const ttl = options?.ttl;\r\n\r\n await this.keyv.setMany(\r\n Object.entries(data).map(([key, value]) => ({\r\n key,\r\n value,\r\n ttl,\r\n })),\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n await this.keyv.deleteMany(keys);\r\n }\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface AsyncLazyCacheOptions {\r\n /**\r\n * A factory function that will be called to create the underlying cache when needed.\r\n */\r\n factory: () => Promise<ICache> | ICache;\r\n\r\n /**\r\n * Whether it should initialize only when needed.\r\n *\r\n * - When set to `true`, it will initialize the cache only when a method is called.\r\n * - When set to `false`, it will initialize the cache upon construction.\r\n *\r\n * @default `false`\r\n */\r\n lazy?: boolean;\r\n}\r\n\r\n/**\r\n * A cache layer that initializes the underlying cache asynchronously.\r\n *\r\n * This layer can be used to connect to an external cache with the cache methods already available.\r\n *\r\n * This layer can also be used to lazily initialize the cache only when it's actually needed.\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new AsyncCache({\r\n * factory: async () => {\r\n * const redisClient = await createClient({\r\n * url: \"redis://user:password@localhost:6380\",\r\n * });\r\n *\r\n * return new RedisCache({ client: redisClient });\r\n * },\r\n * lazy: true,\r\n * });\r\n *\r\n * cache.get(\"key\")\r\n * .then(result => console.log('redis was connected and read the key:', value));\r\n * ```\r\n */\r\nexport class AsyncLazyCache implements ICache {\r\n protected readonly factory: () => Promise<ICache> | ICache;\r\n protected cache: Promise<ICache> | null = null;\r\n\r\n constructor(options: AsyncLazyCacheOptions) {\r\n this.factory = options.factory;\r\n\r\n if (!options.lazy) {\r\n this.cache = Promise.resolve(this.factory());\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n return (await this.resolveCache()).get<T>(key);\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return (await this.resolveCache()).getOrLoad<T>(key, load, options);\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return (await this.resolveCache()).set<T>(key, value, options);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n return (await this.resolveCache()).delete(key);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return (await this.resolveCache()).getMany<T>(keys);\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return (await this.resolveCache()).setMany<T>(data, options);\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n return (await this.resolveCache()).deleteMany(keys);\r\n }\r\n\r\n /**\r\n * Gets the underlying cache, initializing it if not already initialized.\r\n */\r\n public resolveCache(): Promise<ICache> {\r\n if (!this.cache) {\r\n this.cache = Promise.resolve(this.factory());\r\n }\r\n\r\n return this.cache;\r\n }\r\n\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.d.ts';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\n/**\r\n * The options to construct the {@link CoalescingCache}\r\n */\r\nexport interface CoalescingCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface OngoingRequest {\r\n promise: Promise<any | null>;\r\n type: 'get' | 'getOrLoad';\r\n}\r\n\r\n/**\r\n * A cache strategy layer that deduplicates parallel requests into a single request.\r\n *\r\n * This strategy can prevent the Thundering Herd problem as all parallel requests will be coalesced into one.\r\n */\r\nexport class CoalescingCache implements ICache {\r\n protected readonly ongoingRequests: Map<string, OngoingRequest> = new Map();\r\n protected readonly cache: ICache;\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n\r\n constructor(options: CoalescingCacheOptions) {\r\n this.cache = options.cache;\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n if (ongoingRequest) {\r\n this.logger?.debug(this.name, '[get] Returning ongoing request...', 'key =', key);\r\n\r\n return ongoingRequest.promise;\r\n }\r\n\r\n this.logger?.debug(this.name, '[get] Reading from underlying cache...', 'key =', key);\r\n\r\n const promise = this.cache.get<T>(key);\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'get' });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n // When there's no ongoing requests, we'll do a new one\r\n if (!ongoingRequest) {\r\n this.logger?.debug(this.name, '[getOrLoad] Reading from the underlying cache...', 'key =', key);\r\n\r\n const promise = this.cache.getOrLoad(key, load, options);\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'getOrLoad' });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n // We'll await the ongoing request\r\n let request = await ongoingRequest.promise;\r\n\r\n // When the request is successful or the type is already getOrLoad, we'll just return it\r\n if (request !== null || ongoingRequest.type === 'getOrLoad') {\r\n this.logger?.debug(this.name, '[getOrLoad] Read from an ongoing request.', 'key =', key);\r\n\r\n return request;\r\n }\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing the cache...', 'key =', key);\r\n\r\n // Otherwise, we'll load it manually\r\n const promise = load();\r\n\r\n this.ongoingRequests.set(key, { promise, type: 'getOrLoad' });\r\n\r\n try {\r\n request = await promise;\r\n\r\n // When the request is successful, we'll store it in cache\r\n if (request !== null) {\r\n await this.cache.set(key, request, options);\r\n }\r\n } finally {\r\n // We'll only delete from \"ongoing requests\" when we finish saving it\r\n this.ongoingRequests.delete(key);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const promise = this.cache.set<T>(key, value, options);\r\n\r\n this.ongoingRequests.set(key, {\r\n promise: promise.then(() => value),\r\n type: 'getOrLoad',\r\n });\r\n\r\n return promise.finally(() => this.ongoingRequests.delete(key));\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n try {\r\n this.ongoingRequests.set(key, {\r\n type: 'get',\r\n promise: Promise.resolve(null),\r\n });\r\n\r\n await this.cache.delete(key);\r\n } finally {\r\n this.ongoingRequests.delete(key);\r\n }\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const items: [string, Promise<T | null>][] = [];\r\n const remainingKeys: string[] = [];\r\n\r\n for (const key of keys) {\r\n const ongoingRequest = this.ongoingRequests.get(key);\r\n\r\n if (ongoingRequest) {\r\n items.push([key, ongoingRequest.promise]);\r\n } else {\r\n remainingKeys.push(key);\r\n }\r\n }\r\n\r\n this.logger?.debug(this.name, '[getMany]', items.length, 'ongoing requests found, reading', remainingKeys.length, 'resources.', 'keys =', keys);\r\n\r\n if (remainingKeys.length > 0) {\r\n const promise = this.cache.getMany<T>(remainingKeys);\r\n\r\n for (const key of remainingKeys) {\r\n const itemPromise = promise\r\n .then(data => data[key]!)\r\n .finally(() => this.ongoingRequests.delete(key));\r\n\r\n this.ongoingRequests.set(key, {\r\n promise: itemPromise,\r\n type: 'get',\r\n });\r\n\r\n items.push([key, itemPromise]);\r\n }\r\n }\r\n\r\n return Object.fromEntries(\r\n await Promise.all(\r\n items.map(async ([key, promise]) => [key, await promise])\r\n ),\r\n );\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const promise = this.cache.setMany(data, options);\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n this.ongoingRequests.set(key, {\r\n promise: promise.then(() => value).finally(() => this.ongoingRequests.delete(key)),\r\n type: 'getOrLoad',\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany]', 'keys =', keys);\r\n\r\n try {\r\n for (const key of keys) {\r\n this.ongoingRequests.set(key, {\r\n type: 'get',\r\n promise: Promise.resolve(null),\r\n });\r\n }\r\n\r\n await this.cache.deleteMany(keys);\r\n } finally {\r\n for (const key of keys) {\r\n this.ongoingRequests.delete(key);\r\n }\r\n }\r\n\r\n }\r\n\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface JitteringCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL: number;\r\n\r\n /**\r\n * The maximum jitter (in seconds) to add to the TTL of cached items.\r\n */\r\n maxJitterTTL: number;\r\n}\r\n\r\n/**\r\n * A cache layer that adds a random jitter to the TTL of cached items to prevent cache stampedes.\r\n *\r\n * This layer is useful in scenarios where many cached items expire simultaneously, causing a sudden surge of requests to the underlying data source.\r\n */\r\nexport class JitteringCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected defaultTTL: number;\r\n protected maxJitterTTL: number;\r\n\r\n constructor(options: JitteringCacheOptions) {\r\n this.cache = options.cache;\r\n this.defaultTTL = options.defaultTTL;\r\n this.maxJitterTTL = options.maxJitterTTL;\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.cache.get<T>(key);\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options: SetCacheOptions = {}): Promise<T> {\r\n return this.cache.getOrLoad<T>(key, load, this.jitterTTL(options));\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.set<T>(key, value, this.jitterTTL(options));\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.cache.delete(key);\r\n }\r\n\r\n getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n return this.cache.getMany(keys);\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.setMany(data, this.jitterTTL(options));\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n return this.cache.deleteMany(keys);\r\n }\r\n\r\n protected jitterTTL(options: SetCacheOptions = {}): SetCacheOptions {\r\n const ttl = options.ttl ?? this.defaultTTL;\r\n const jitter = Math.random() * this.maxJitterTTL;\r\n\r\n return {\r\n ...options,\r\n ttl: ttl + jitter,\r\n };\r\n }\r\n}\r\n","import type { ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\ninterface BaseKeyTransformingCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface KeyTransformerFnCacheOptions extends BaseKeyTransformingCacheOptions {\r\n /**\r\n * The function that will be called with each key to transform it.\r\n * @param key The original key\r\n * @return The transformed key\r\n */\r\n transform: (key: string) => string;\r\n prefix?: never;\r\n suffix?: never;\r\n}\r\n\r\ninterface KeyAffixCacheOptions extends BaseKeyTransformingCacheOptions {\r\n /**\r\n * The prefix to add to keys\r\n */\r\n prefix?: string;\r\n\r\n /**\r\n * The suffix to add to keys\r\n */\r\n suffix?: string;\r\n}\r\n\r\nexport type KeyTransformingCacheOptions = KeyAffixCacheOptions | KeyTransformerFnCacheOptions;\r\n\r\n/**\r\n * A cache layer that changes keys before passing them to the underlying cache.\r\n *\r\n * This layer can be used to:\r\n * - Create namespaced caches, avoiding conflicts with shared cache servers.\r\n * - Add a version number, allowing schema changes without causing incompatibility.\r\n * - Implement any other key transformations, such as normalizing or hashing.\r\n */\r\nexport class KeyTransformingCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected transform: (key: string) => string;\r\n\r\n constructor(options: KeyTransformingCacheOptions) {\r\n this.cache = options.cache;\r\n\r\n if ('transform' in options) {\r\n this.transform = options.transform;\r\n } else {\r\n const prefix = options.prefix || '';\r\n const suffix = options.suffix || '';\r\n this.transform = (key: string) => `${prefix}${key}${suffix}`;\r\n }\r\n }\r\n\r\n get<T>(key: string): Promise<T | null> {\r\n return this.cache.get<T>(this.transform(key));\r\n }\r\n\r\n getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n return this.cache.getOrLoad(this.transform(key), load, options);\r\n }\r\n\r\n set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.set(this.transform(key), value, options);\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n return this.cache.delete(this.transform(key));\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const transformedKeys = keys.map(key => this.transform(key));\r\n const data = await this.cache.getMany<T>(transformedKeys);\r\n\r\n return Object.fromEntries(\r\n Object.entries(data).map(([transformedKey, value]) => [\r\n keys[transformedKeys.indexOf(transformedKey)],\r\n value,\r\n ]),\r\n );\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n return this.cache.setMany(\r\n Object.fromEntries(\r\n Object.entries(data).map(([key, value]) => [this.transform(key), value]),\r\n ),\r\n options,\r\n )\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n return this.cache.deleteMany(keys.map(key => this.transform(key)));\r\n }\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\n/**\r\n * The options to create the {@link SWRCache}\r\n */\r\nexport interface SWRCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The default Time To Live in seconds\r\n */\r\n defaultTTL: number;\r\n\r\n /**\r\n * The additional time in seconds to keep the resource stored, but consider it as stale\r\n */\r\n staleTTL: number;\r\n}\r\n\r\ninterface CachedItem<T> {\r\n data: T;\r\n expiresAt: number;\r\n}\r\n\r\n/**\r\n * A cache strategy that returns stale resources immediately while it refreshes the cache in background.\r\n *\r\n * This is an implementation of the Stale-While-Revalidate algorithm.\r\n *\r\n * This strategy is only effective when calling {@link ICache#getOrLoad}.\r\n */\r\nexport class SWRCache implements ICache {\r\n protected readonly revalidating: Map<string, Promise<any>> = new Map<string, Promise<any>>();\r\n protected readonly cache: ICache;\r\n protected readonly name?: string;\r\n protected readonly logger?: Logger;\r\n protected defaultTTL: number;\r\n protected staleTTL: number;\r\n\r\n constructor(options: SWRCacheOptions) {\r\n this.cache = options.cache;\r\n this.name = options.name;\r\n this.logger = options.logger;\r\n this.defaultTTL = options.defaultTTL;\r\n this.staleTTL = options.staleTTL;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n this.logger?.debug(this.name, '[get]', 'key =', key);\r\n\r\n const item = await this.cache.get<CachedItem<T>>(key);\r\n\r\n return item ? item.data : null;\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options: SetCacheOptions = {}): Promise<T> {\r\n this.logger?.debug(this.name, '[getOrLoad]', 'key =', key);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const cacheOptions = {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n };\r\n\r\n const loadItem = async (): Promise<CachedItem<T>> => ({\r\n data: await load(),\r\n expiresAt: Date.now() + ttl * 1000,\r\n });\r\n\r\n const item = await this.cache.getOrLoad<CachedItem<T>>(key, loadItem, cacheOptions);\r\n\r\n // The item is stale, we'll revalidate in background\r\n if (item && item.expiresAt < Date.now() && !this.revalidating.has(key)) {\r\n this.logger?.debug(this.name, '[getOrLoad] Refreshing stale resource in background...', 'key =', key);\r\n\r\n const promise = loadItem()\r\n .then(newItem => this.cache.set(key, newItem, cacheOptions))\r\n .finally(() => this.revalidating.delete(key));\r\n\r\n this.revalidating.set(key, promise);\r\n }\r\n\r\n return item.data;\r\n }\r\n\r\n set<T>(key: string, value: T, options: SetCacheOptions = {}): Promise<void> {\r\n this.logger?.debug(this.name, '[set]', 'key =', key);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const item: CachedItem<T> = {\r\n data: value,\r\n expiresAt: Date.now() + ttl * 1000,\r\n };\r\n const cacheOptions = {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n };\r\n\r\n return this.cache.set(key, item, cacheOptions);\r\n }\r\n\r\n delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete]', 'key =', key);\r\n\r\n return this.cache.delete(key);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n this.logger?.debug(this.name, '[getMany]', 'keys =', keys);\r\n\r\n const data = await this.cache.getMany<CachedItem<T>>(keys);\r\n const items: Record<string, T | null> = {};\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n items[key] = value ? value.data : null;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n setMany<T>(data: Record<string, T>, options: SetCacheOptions = {}): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany]', 'data =', data);\r\n\r\n const ttl = options.ttl || this.defaultTTL;\r\n const items: Record<string, CachedItem<T>> = {};\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n items[key] = {\r\n data: value,\r\n expiresAt: Date.now() + ttl * 1000,\r\n };\r\n }\r\n\r\n return this.cache.setMany(items, {\r\n ...options,\r\n ttl: ttl + this.staleTTL,\r\n });\r\n }\r\n\r\n deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany]', 'keys =', keys);\r\n\r\n return this.cache.deleteMany(keys);\r\n }\r\n\r\n}\r\n","import { BaseCache } from '../../base/index.js';\r\nimport type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\n\r\nexport interface TieredCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The list of tiers in order of priority.\r\n *\r\n * The first item represents the \"hot\" cache while the last one represents a \"cold\" cache.\r\n */\r\n tiers: CacheTier[];\r\n}\r\n\r\nexport interface CacheTier {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n\r\n /**\r\n * The options that will be passed to {@link ICache#getOrLoad}, {@link ICache#set} and {@link ICache#setMany}.\r\n */\r\n options?: SetCacheOptions;\r\n}\r\n\r\n/**\r\n * A cache strategy layer that implements multi-level caching\r\n *\r\n * The objective of a tiered cache is to minimize latency while still having the benefits of a larger, shared cache.\r\n * This is done by having the first tier being an in-memory cache (such as {@link LocalTTLCache}) that stores a small amount of items with a short TTL,\r\n * and the second tier being an external cache (such as {@link RedisCache}) that stores a lot more items and may have a longer TTL.\r\n *\r\n * This strategy is similarly known as Cache Hierarchy, CPU cache or L1/L2/L3 cache.\r\n */\r\nexport class TieredCache extends BaseCache {\r\n protected readonly tiers: CacheTier[];\r\n\r\n constructor(options: TieredCacheOptions) {\r\n super(options);\r\n this.tiers = options.tiers;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const next = (i: number): Promise<T | null> => {\r\n this.logger?.debug(this.name, '[get] Reading from tier =', i, 'key =', key);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n if (isLastTier) {\r\n return tier.cache.get<T>(key);\r\n }\r\n\r\n return tier.cache.getOrLoad(key, () => next(i + 1), tier.options);\r\n };\r\n\r\n return next(0);\r\n }\r\n\r\n override async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n const next = (i: number): Promise<T> => {\r\n this.logger?.debug(this.name, '[getOrLoad] Reading from tier =', i, 'key =', key);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n if (isLastTier) {\r\n return tier.cache.getOrLoad(key, load, options || tier.options);\r\n }\r\n\r\n return tier.cache.getOrLoad(key, () => next(i + 1), tier.options);\r\n };\r\n\r\n return next(0);\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[set] Writing to all tiers in parallel...', 'key =', key);\r\n\r\n await Promise.all(\r\n this.tiers.map((tier, i) => {\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n return tier.cache.set(key, value, isLastTier ? (options || tier.options) : tier.options);\r\n }),\r\n );\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n this.logger?.debug(this.name, '[delete] Deleting from all tiers in parallel...', 'key =', key);\r\n\r\n await Promise.all(\r\n this.tiers.map(tier => tier.cache.delete(key)),\r\n );\r\n }\r\n\r\n override async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const next = async (i: number, remainingKeys: string[]): Promise<Record<string, T | null>> => {\r\n this.logger?.debug(this.name, '[getMany] Reading from tier =', i, 'keys =', keys);\r\n\r\n const tier = this.tiers[i]!;\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n const items = await tier.cache.getMany<T>(remainingKeys);\r\n\r\n remainingKeys = Object.entries(items)\r\n .filter(([, value]) => value === null || value === undefined)\r\n .map(([key]) => key);\r\n\r\n if (isLastTier || remainingKeys.length === 0) {\r\n return items;\r\n }\r\n\r\n const nextItems = await next(i + 1, remainingKeys);\r\n\r\n const backfillItems = Object.entries(nextItems)\r\n .filter(([, value]) => value !== null && value !== undefined);\r\n\r\n if (backfillItems.length > 0) {\r\n await tier.cache.setMany(Object.fromEntries(backfillItems), tier.options);\r\n }\r\n\r\n return {\r\n ...items,\r\n ...nextItems,\r\n };\r\n };\r\n\r\n return next(0, keys);\r\n }\r\n\r\n override async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n this.logger?.debug(this.name, '[setMany] Writing to all tiers in parallel...', 'data =', data);\r\n\r\n await Promise.all(\r\n this.tiers.map((tier, i) => {\r\n const isLastTier = i === this.tiers.length - 1;\r\n\r\n return tier.cache.setMany(data, isLastTier ? (options || tier.options) : tier.options);\r\n }),\r\n );\r\n }\r\n\r\n override async deleteMany(keys: string[]): Promise<void> {\r\n this.logger?.debug(this.name, '[deleteMany] Deleting from all tiers in parallel...', 'keys =', keys);\r\n\r\n await Promise.all(\r\n this.tiers.map(tier => tier.cache.deleteMany(keys)),\r\n );\r\n }\r\n\r\n}\r\n","import type { BaseCacheOptions, ICache, SetCacheOptions } from '../../types/cache.js';\r\nimport type { Logger } from '../../types/logger.js';\r\n\r\nexport interface MetricsCollectingCacheOptions extends BaseCacheOptions {\r\n /**\r\n * The underlying cache\r\n */\r\n cache: ICache;\r\n}\r\n\r\ninterface CacheCountMetrics {\r\n /** Amount of times the cache didn't have the requested resource */\r\n missCount: number;\r\n\r\n /** The amount of times the cache returned the requested resource */\r\n hitCount: number;\r\n\r\n /** The amount of times the cache was refreshed (the `load` function was called in {@link ICache#getOrLoad}) */\r\n loadCount: number;\r\n\r\n /** The amount of times the cache was updated */\r\n setCount: number;\r\n\r\n /** The amount of times a cached resource was invalidated */\r\n deleteCount: number;\r\n}\r\n\r\ninterface CacheTimeMetrics {\r\n /** Average time taken to verify that the cache didn't have a single requested resource (in milliseconds) */\r\n missTime: number;\r\n\r\n /** Average time taken to return a single requested resource from cache (in milliseconds) */\r\n hitTime: number;\r\n\r\n /** Average time taken to load a single resource from source (in milliseconds) */\r\n loadTime: number;\r\n\r\n /** Average time taken to update a single resource from cache (in milliseconds) */\r\n setTime: number;\r\n\r\n /** Average time taken to invalidate a single resource from cache (in milliseconds) */\r\n deleteTime: number;\r\n}\r\n\r\nexport type CacheMetrics = CacheCountMetrics & CacheTimeMetrics;\r\n\r\n/**\r\n * A cache layer that collects metrics from each cache call.\r\n *\r\n * This can be useful to measure the cache effectiveness\r\n */\r\nexport class MetricsCollectingCache implements ICache {\r\n protected readonly cache: ICache;\r\n protected readonly logger?: Logger;\r\n protected name?: string;\r\n\r\n protected countMetrics: CacheCountMetrics = {\r\n missCount: 0,\r\n hitCount: 0,\r\n loadCount: 0,\r\n setCount: 0,\r\n deleteCount: 0,\r\n };\r\n protected totalTimeMetrics: CacheTimeMetrics = {\r\n missTime: 0,\r\n hitTime: 0,\r\n loadTime: 0,\r\n setTime: 0,\r\n deleteTime: 0,\r\n };\r\n\r\n constructor(options: MetricsCollectingCacheOptions) {\r\n this.cache = options.cache;\r\n this.logger = options.logger;\r\n this.name = options.name;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n const startAt = performance.now();\r\n\r\n const data = await this.cache.get<T>(key);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n if (data === null) {\r\n this.countMetrics.missCount++;\r\n this.totalTimeMetrics.missTime += time;\r\n\r\n this.logger?.debug(this.name, '[get] Cache miss.', 'key =', key, 'timeMS =', time);\r\n } else {\r\n this.countMetrics.hitCount++;\r\n this.totalTimeMetrics.hitTime += time;\r\n\r\n this.logger?.debug(this.name, '[get] Cache hit.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async getOrLoad<T>(key: string, load: () => Promise<T>, options?: SetCacheOptions): Promise<T> {\r\n let didTriggerLoad: boolean = false;\r\n let loadFinishAt: number = 0;\r\n\r\n const loadMiddleware = (): Promise<T> => {\r\n const missFinishAt = performance.now();\r\n\r\n this.countMetrics.missCount++;\r\n this.totalTimeMetrics.missTime += missFinishAt - startAt;\r\n\r\n didTriggerLoad = true;\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Cache refresh.', 'key =', key);\r\n\r\n const loadStartAt = performance.now();\r\n\r\n return load().finally(() => {\r\n loadFinishAt = performance.now();\r\n\r\n this.countMetrics.loadCount++;\r\n this.totalTimeMetrics.loadTime += loadFinishAt - loadStartAt;\r\n });\r\n };\r\n\r\n let startAt = performance.now();\r\n\r\n const data = await this.cache.getOrLoad<T>(key, loadMiddleware, options);\r\n\r\n if (!didTriggerLoad) {\r\n const hitFinishedAt = performance.now();\r\n\r\n this.countMetrics.hitCount++;\r\n this.totalTimeMetrics.hitTime += hitFinishedAt - startAt;\r\n\r\n this.logger?.debug(this.name, '[getOrLoad] Cache hit.', 'key =', key);\r\n } else {\r\n const setFinishAt = performance.now();\r\n\r\n this.countMetrics.setCount++;\r\n this.totalTimeMetrics.setTime += setFinishAt - loadFinishAt;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async set<T>(key: string, value: T, options?: SetCacheOptions): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.set(key, value, options);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.setCount++;\r\n this.totalTimeMetrics.setTime += time;\r\n\r\n this.logger?.debug(this.name, '[set] Cache set.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.delete(key);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.deleteCount++;\r\n this.totalTimeMetrics.deleteTime += time;\r\n\r\n this.logger?.debug(this.name, '[delete] Cache delete.', 'key =', key, 'timeMS =', time);\r\n }\r\n\r\n async getMany<T>(keys: string[]): Promise<Record<string, T | null>> {\r\n const startAt = performance.now();\r\n\r\n const data = await this.cache.getMany<T>(keys);\r\n\r\n const time = performance.now() - startAt;\r\n const timePerKey = time / keys.length;\r\n\r\n const miss = keys.filter(key => data[key] === undefined || data[key] === null).length;\r\n const hits = keys.length - miss;\r\n\r\n this.countMetrics.missCount += miss;\r\n this.countMetrics.hitCount += hits;\r\n this.totalTimeMetrics.missTime += miss * timePerKey;\r\n this.totalTimeMetrics.hitTime += hits * timePerKey;\r\n\r\n this.logger?.debug(this.name, '[getMany]', 'hits =', hits, 'misses = ', miss, 'timeMS =', time);\r\n\r\n return data;\r\n }\r\n\r\n async setMany<T>(data: Record<string, T>, options?: SetCacheOptions): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.setMany(data, options);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n const sets = Object.keys(data).length;\r\n\r\n this.countMetrics.setCount += sets;\r\n this.totalTimeMetrics.setTime += time;\r\n\r\n this.logger?.debug(this.name, '[setMany]', 'sets =', sets, 'timeMS =', time);\r\n }\r\n\r\n async deleteMany(keys: string[]): Promise<void> {\r\n const startAt = performance.now();\r\n\r\n await this.cache.deleteMany(keys);\r\n\r\n const time = performance.now() - startAt;\r\n\r\n this.countMetrics.deleteCount += keys.length;\r\n this.totalTimeMetrics.deleteTime += time;\r\n\r\n this.logger?.debug(this.name, '[deleteMany]', 'deletes =', keys.length, 'timeMS =', time);\r\n }\r\n\r\n getMetrics(): CacheMetrics {\r\n const count = this.countMetrics;\r\n const time = this.totalTimeMetrics;\r\n\r\n return {\r\n ...count,\r\n missTime: count.missCount === 0 ? 0 : time.missTime / count.missCount,\r\n hitTime: count.hitCount === 0 ? 0 : time.hitTime / count.hitCount,\r\n loadTime: count.loadCount === 0 ? 0 : time.loadTime / count.loadCount,\r\n setTime: count.setCount === 0 ? 0 : time.setTime / count.setCount,\r\n deleteTime: count.deleteCount === 0 ? 0 : time.deleteTime / count.deleteCount,\r\n };\r\n }\r\n\r\n resetMetrics(): void {\r\n this.countMetrics = {\r\n missCount: 0,\r\n hitCount: 0,\r\n loadCount: 0,\r\n setCount: 0,\r\n deleteCount: 0,\r\n };\r\n this.totalTimeMetrics = {\r\n missTime: 0,\r\n hitTime: 0,\r\n loadTime: 0,\r\n setTime: 0,\r\n deleteTime: 0,\r\n };\r\n\r\n this.logger?.debug(this.name, '[resetMetrics]');\r\n }\r\n\r\n}\r\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cachimbo",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"author": "Guilherme Chaguri",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "An advanced caching library that allows you to layer different strategies in order to maximize the performance.",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git://github.com/Guichaguri/cachimbo.git"
|
|
10
|
+
},
|
|
7
11
|
"type": "module",
|
|
8
12
|
"scripts": {
|
|
9
13
|
"build": "tsdown",
|
|
@@ -67,7 +71,6 @@
|
|
|
67
71
|
"iovalkey": "^0.3.3",
|
|
68
72
|
"keyv": "^5.5.5",
|
|
69
73
|
"memcache": "^1.0.0",
|
|
70
|
-
"rimraf": "^6.1.2",
|
|
71
74
|
"tsdown": "^0.17.0",
|
|
72
75
|
"tsx": "^4.20.6",
|
|
73
76
|
"typescript": "^5.9.3",
|