@zudojs/cache 0.0.1
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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cache.d.ts +62 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +135 -0
- package/dist/cache.js.map +1 -0
- package/dist/constants.d.ts +40 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +61 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +8 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/invalidation.d.ts +68 -0
- package/dist/invalidation.d.ts.map +1 -0
- package/dist/invalidation.js +103 -0
- package/dist/invalidation.js.map +1 -0
- package/dist/key-builder.d.ts +36 -0
- package/dist/key-builder.d.ts.map +1 -0
- package/dist/key-builder.js +66 -0
- package/dist/key-builder.js.map +1 -0
- package/dist/lock.d.ts +30 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +103 -0
- package/dist/lock.js.map +1 -0
- package/dist/memory.d.ts +37 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +140 -0
- package/dist/memory.js.map +1 -0
- package/dist/metrics.d.ts +41 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +96 -0
- package/dist/metrics.js.map +1 -0
- package/dist/serializer.d.ts +43 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/serializer.js +74 -0
- package/dist/serializer.js.map +1 -0
- package/dist/store.d.ts +42 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +180 -0
- package/dist/store.js.map +1 -0
- package/dist/tags.d.ts +37 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +93 -0
- package/dist/tags.js.map +1 -0
- package/dist/types-adapter.d.ts +24 -0
- package/dist/types-adapter.d.ts.map +1 -0
- package/dist/types-adapter.js +2 -0
- package/dist/types-adapter.js.map +1 -0
- package/dist/types-config.d.ts +21 -0
- package/dist/types-config.d.ts.map +1 -0
- package/dist/types-config.js +2 -0
- package/dist/types-config.js.map +1 -0
- package/dist/types-events.d.ts +38 -0
- package/dist/types-events.d.ts.map +1 -0
- package/dist/types-events.js +2 -0
- package/dist/types-events.js.map +1 -0
- package/dist/types-health.d.ts +20 -0
- package/dist/types-health.d.ts.map +1 -0
- package/dist/types-health.js +2 -0
- package/dist/types-health.js.map +1 -0
- package/dist/types-keys.d.ts +15 -0
- package/dist/types-keys.d.ts.map +1 -0
- package/dist/types-keys.js +2 -0
- package/dist/types-keys.js.map +1 -0
- package/dist/types-lock.d.ts +22 -0
- package/dist/types-lock.d.ts.map +1 -0
- package/dist/types-lock.js +2 -0
- package/dist/types-lock.js.map +1 -0
- package/dist/types-metrics.d.ts +19 -0
- package/dist/types-metrics.d.ts.map +1 -0
- package/dist/types-metrics.js +2 -0
- package/dist/types-metrics.js.map +1 -0
- package/dist/types-operations.d.ts +39 -0
- package/dist/types-operations.d.ts.map +1 -0
- package/dist/types-operations.js +2 -0
- package/dist/types-operations.js.map +1 -0
- package/dist/types-results.d.ts +33 -0
- package/dist/types-results.d.ts.map +1 -0
- package/dist/types-results.js +2 -0
- package/dist/types-results.js.map +1 -0
- package/dist/types-tags.d.ts +13 -0
- package/dist/types-tags.d.ts.map +1 -0
- package/dist/types-tags.js +2 -0
- package/dist/types-tags.js.map +1 -0
- package/dist/types-utility.d.ts +31 -0
- package/dist/types-utility.d.ts.map +1 -0
- package/dist/types-utility.js +2 -0
- package/dist/types-utility.js.map +1 -0
- package/dist/types-values.d.ts +24 -0
- package/dist/types-values.d.ts.map +1 -0
- package/dist/types-values.js +2 -0
- package/dist/types-values.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/cache — Serializer
|
|
3
|
+
*
|
|
4
|
+
* Provides serializer implementations for converting cache values
|
|
5
|
+
* to and from storable representations. Delegates to @zudojs/serialization
|
|
6
|
+
* for the actual JSON serialization with type preservation.
|
|
7
|
+
*/
|
|
8
|
+
import { JSONSerializer } from "@zudojs/serialization";
|
|
9
|
+
/* -------------------------------------------------------------------------- */
|
|
10
|
+
/* JSON Serializer */
|
|
11
|
+
/* -------------------------------------------------------------------------- */
|
|
12
|
+
/**
|
|
13
|
+
* Serializes values to JSON strings and deserializes them back.
|
|
14
|
+
*
|
|
15
|
+
* Uses @zudojs/serialization's JSONSerializer for type preservation
|
|
16
|
+
* (Date, BigInt, Map, Set, Uint8Array) when configured.
|
|
17
|
+
*/
|
|
18
|
+
export class JsonCacheSerializer {
|
|
19
|
+
inner;
|
|
20
|
+
preserveTypes;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.preserveTypes = options?.preserveTypes ?? false;
|
|
23
|
+
this.inner = new JSONSerializer();
|
|
24
|
+
}
|
|
25
|
+
serialize(value) {
|
|
26
|
+
return this.inner.serialize(value, {
|
|
27
|
+
preserveTypes: this.preserveTypes,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
deserialize(value) {
|
|
31
|
+
return this.inner.deserialize(value, {
|
|
32
|
+
preserveTypes: this.preserveTypes,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/* -------------------------------------------------------------------------- */
|
|
37
|
+
/* Raw Serializer */
|
|
38
|
+
/* -------------------------------------------------------------------------- */
|
|
39
|
+
/**
|
|
40
|
+
* Pass-through serializer for values that are already in
|
|
41
|
+
* their storable form (e.g., strings, numbers).
|
|
42
|
+
*/
|
|
43
|
+
export class RawCacheSerializer {
|
|
44
|
+
serialize(value) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
deserialize(value) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/* -------------------------------------------------------------------------- */
|
|
52
|
+
/* Default Singleton */
|
|
53
|
+
/* -------------------------------------------------------------------------- */
|
|
54
|
+
/** Default JSON serializer instance. */
|
|
55
|
+
export const defaultSerializer = new JsonCacheSerializer();
|
|
56
|
+
/** Default raw (pass-through) serializer instance. */
|
|
57
|
+
export const rawSerializer = new RawCacheSerializer();
|
|
58
|
+
/**
|
|
59
|
+
* Returns the appropriate serializer for the given value type.
|
|
60
|
+
*
|
|
61
|
+
* - Objects, arrays, dates → JSON serializer
|
|
62
|
+
* - Strings, numbers, booleans, null → raw serializer
|
|
63
|
+
*/
|
|
64
|
+
export function getSerializer(value) {
|
|
65
|
+
if (value === null ||
|
|
66
|
+
value === undefined ||
|
|
67
|
+
typeof value === "string" ||
|
|
68
|
+
typeof value === "number" ||
|
|
69
|
+
typeof value === "boolean") {
|
|
70
|
+
return rawSerializer;
|
|
71
|
+
}
|
|
72
|
+
return defaultSerializer;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACb,KAAK,CAAiB;IACtB,aAAa,CAAU;IAExC,YAAY,OAA8C;QACxD,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;CACF;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,SAAS,CAAC,KAAc;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,KAAc;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAE3D,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAc;IAEd,IACE,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/cache — Store
|
|
3
|
+
* Wraps a CacheAdapter with metrics, events, middleware, and error handling.
|
|
4
|
+
*/
|
|
5
|
+
import type { CacheAdapter, CacheClearOptions, CacheClearResult, CacheDeleteOptions, CacheDeleteResult, CacheEvent, CacheEventHandler, CacheEventSubscription, CacheGetManyOptions, CacheGetOptions, CacheGetResult, CacheHasOptions, CacheKeysOptions, CacheMiddleware, CacheMetrics, CacheSetManyOptions, CacheSetOptions, CacheSetResult, CacheStore } from "./types.js";
|
|
6
|
+
export declare class DefaultCacheStore implements CacheStore {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
private readonly adapter;
|
|
9
|
+
private readonly metrics?;
|
|
10
|
+
private readonly middlewares;
|
|
11
|
+
private readonly handlers;
|
|
12
|
+
constructor(options: {
|
|
13
|
+
readonly adapter: CacheAdapter;
|
|
14
|
+
readonly metrics?: CacheMetrics;
|
|
15
|
+
readonly middlewares?: readonly CacheMiddleware[];
|
|
16
|
+
});
|
|
17
|
+
connect(): Promise<void>;
|
|
18
|
+
disconnect(): Promise<void>;
|
|
19
|
+
get<TValue = unknown>(key: string, options?: CacheGetOptions): Promise<CacheGetResult<TValue>>;
|
|
20
|
+
has(key: string, options?: CacheHasOptions): Promise<boolean>;
|
|
21
|
+
keys(options?: CacheKeysOptions): Promise<readonly string[]>;
|
|
22
|
+
set<TValue = unknown>(key: string, value: TValue, options?: CacheSetOptions): Promise<CacheSetResult>;
|
|
23
|
+
delete(key: string, options?: CacheDeleteOptions): Promise<CacheDeleteResult>;
|
|
24
|
+
clear(options?: CacheClearOptions): Promise<CacheClearResult>;
|
|
25
|
+
getMany<TValue = unknown>(keys: readonly string[], options?: CacheGetManyOptions): Promise<ReadonlyMap<string, CacheGetResult<TValue>>>;
|
|
26
|
+
setMany<TValue = unknown>(entries: ReadonlyMap<string, TValue>, options?: CacheSetManyOptions): Promise<readonly CacheSetResult[]>;
|
|
27
|
+
deleteMany(keys: readonly string[], options?: {
|
|
28
|
+
readonly namespace?: string;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
readonly deleted: number;
|
|
31
|
+
readonly keys: readonly string[];
|
|
32
|
+
}>;
|
|
33
|
+
subscribe(eventType: CacheEvent["type"] | "*", handler: CacheEventHandler): CacheEventSubscription;
|
|
34
|
+
private emit;
|
|
35
|
+
private executeWithMiddleware;
|
|
36
|
+
}
|
|
37
|
+
export declare function createCacheStore(options: {
|
|
38
|
+
readonly adapter: CacheAdapter;
|
|
39
|
+
readonly metrics?: CacheMetrics;
|
|
40
|
+
readonly middlewares?: readonly CacheMiddleware[];
|
|
41
|
+
}): DefaultCacheStore;
|
|
42
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EAEf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IAEtE,YAAY,OAAO,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;QAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;KACnD,EAKA;IAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvB;IACD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAEK,GAAG,CAAC,MAAM,GAAG,OAAO,EACxB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAIjC;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlE;IAEK,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAMjE;IAEK,GAAG,CAAC,MAAM,GAAG,OAAO,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAIzB;IAEK,MAAM,CACV,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAI5B;IAEK,KAAK,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIlE;IAEK,OAAO,CAAC,MAAM,GAAG,OAAO,EAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAOtD;IAEK,OAAO,CAAC,MAAM,GAAG,OAAO,EAC5B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAOpC;IAEK,UAAU,CACd,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACxC,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAYzE;IAED,SAAS,CACP,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,EACnC,OAAO,EAAE,iBAAiB,GACzB,sBAAsB,CAQxB;IAED,OAAO,CAAC,IAAI;YAgBE,qBAAqB;CA0EpC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACnD,GAAG,iBAAiB,CAEpB"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/cache — Store
|
|
3
|
+
* Wraps a CacheAdapter with metrics, events, middleware, and error handling.
|
|
4
|
+
*/
|
|
5
|
+
import { CacheError, CacheOperation } from "./errors.js";
|
|
6
|
+
export class DefaultCacheStore {
|
|
7
|
+
name;
|
|
8
|
+
adapter;
|
|
9
|
+
metrics;
|
|
10
|
+
middlewares = [];
|
|
11
|
+
handlers = new Map();
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.adapter = options.adapter;
|
|
14
|
+
this.name = options.adapter.name;
|
|
15
|
+
this.metrics = options.metrics;
|
|
16
|
+
if (options.middlewares)
|
|
17
|
+
this.middlewares = [...options.middlewares];
|
|
18
|
+
}
|
|
19
|
+
connect() {
|
|
20
|
+
return this.adapter.connect?.() ?? Promise.resolve();
|
|
21
|
+
}
|
|
22
|
+
disconnect() {
|
|
23
|
+
return this.adapter.disconnect?.() ?? Promise.resolve();
|
|
24
|
+
}
|
|
25
|
+
async get(key, options) {
|
|
26
|
+
return this.executeWithMiddleware("get", key, () => this.adapter.get(key, options));
|
|
27
|
+
}
|
|
28
|
+
async has(key, options) {
|
|
29
|
+
return this.executeWithMiddleware("has", key, () => this.adapter.has(key, options));
|
|
30
|
+
}
|
|
31
|
+
async keys(options) {
|
|
32
|
+
return this.executeWithMiddleware("keys", "*", () => this.adapter.keys?.(options) ?? Promise.resolve([]));
|
|
33
|
+
}
|
|
34
|
+
async set(key, value, options) {
|
|
35
|
+
return this.executeWithMiddleware("set", key, () => this.adapter.set(key, value, options));
|
|
36
|
+
}
|
|
37
|
+
async delete(key, options) {
|
|
38
|
+
return this.executeWithMiddleware("delete", key, () => this.adapter.delete(key, options));
|
|
39
|
+
}
|
|
40
|
+
async clear(options) {
|
|
41
|
+
return this.executeWithMiddleware("clear", "*", () => this.adapter.clear(options));
|
|
42
|
+
}
|
|
43
|
+
async getMany(keys, options) {
|
|
44
|
+
if (this.adapter.getMany)
|
|
45
|
+
return this.adapter.getMany(keys, options);
|
|
46
|
+
const results = new Map();
|
|
47
|
+
for (const key of keys)
|
|
48
|
+
results.set(key, await this.get(key, options));
|
|
49
|
+
return results;
|
|
50
|
+
}
|
|
51
|
+
async setMany(entries, options) {
|
|
52
|
+
if (this.adapter.setMany)
|
|
53
|
+
return this.adapter.setMany(entries, options);
|
|
54
|
+
const results = [];
|
|
55
|
+
for (const [key, value] of entries)
|
|
56
|
+
results.push(await this.set(key, value, options));
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
async deleteMany(keys, options) {
|
|
60
|
+
if (this.adapter.deleteMany)
|
|
61
|
+
return this.adapter.deleteMany(keys, options);
|
|
62
|
+
let deleted = 0;
|
|
63
|
+
const deletedKeys = [];
|
|
64
|
+
for (const key of keys) {
|
|
65
|
+
const result = await this.delete(key, options);
|
|
66
|
+
if (result.deleted) {
|
|
67
|
+
deleted++;
|
|
68
|
+
deletedKeys.push(key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { deleted, keys: deletedKeys };
|
|
72
|
+
}
|
|
73
|
+
subscribe(eventType, handler) {
|
|
74
|
+
if (!this.handlers.has(eventType))
|
|
75
|
+
this.handlers.set(eventType, new Set());
|
|
76
|
+
this.handlers.get(eventType).add(handler);
|
|
77
|
+
return {
|
|
78
|
+
unsubscribe: () => {
|
|
79
|
+
this.handlers.get(eventType)?.delete(handler);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
emit(event) {
|
|
84
|
+
const specific = this.handlers.get(event.type);
|
|
85
|
+
const wildcard = this.handlers.get("*");
|
|
86
|
+
const all = new Set([
|
|
87
|
+
...(specific ?? []),
|
|
88
|
+
...(wildcard ?? []),
|
|
89
|
+
]);
|
|
90
|
+
for (const handler of all) {
|
|
91
|
+
try {
|
|
92
|
+
handler(event);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* swallow */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async executeWithMiddleware(operation, key, fn) {
|
|
100
|
+
const context = {
|
|
101
|
+
key,
|
|
102
|
+
operation,
|
|
103
|
+
startedAt: new Date(),
|
|
104
|
+
};
|
|
105
|
+
const execute = async () => {
|
|
106
|
+
const start = performance.now();
|
|
107
|
+
try {
|
|
108
|
+
const result = await fn();
|
|
109
|
+
const latencyMs = performance.now() - start;
|
|
110
|
+
this.metrics?.observeLatency(operation, latencyMs);
|
|
111
|
+
if (operation === "get") {
|
|
112
|
+
const hitResult = result;
|
|
113
|
+
if (hitResult.hit) {
|
|
114
|
+
this.metrics?.incrementHit(key);
|
|
115
|
+
this.emit({
|
|
116
|
+
type: "cache.hit",
|
|
117
|
+
key,
|
|
118
|
+
occurredAt: new Date(),
|
|
119
|
+
latencyMs,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.metrics?.incrementMiss(key);
|
|
124
|
+
this.emit({
|
|
125
|
+
type: "cache.miss",
|
|
126
|
+
key,
|
|
127
|
+
occurredAt: new Date(),
|
|
128
|
+
latencyMs,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (operation === "set") {
|
|
133
|
+
this.metrics?.incrementSet(key);
|
|
134
|
+
this.emit({ type: "cache.set", key, occurredAt: new Date() });
|
|
135
|
+
}
|
|
136
|
+
else if (operation === "delete") {
|
|
137
|
+
this.metrics?.incrementDelete(key);
|
|
138
|
+
this.emit({
|
|
139
|
+
type: "cache.delete",
|
|
140
|
+
key,
|
|
141
|
+
occurredAt: new Date(),
|
|
142
|
+
deleted: true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else if (operation === "clear") {
|
|
146
|
+
this.emit({
|
|
147
|
+
type: "cache.clear",
|
|
148
|
+
occurredAt: new Date(),
|
|
149
|
+
cleared: 0,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
this.metrics?.incrementError(key);
|
|
156
|
+
this.emit({ type: "cache.error", key, occurredAt: new Date(), error });
|
|
157
|
+
throw new CacheError(`Cache ${operation} failed for key "${key}".`, {
|
|
158
|
+
cause: error,
|
|
159
|
+
operation,
|
|
160
|
+
key,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
let index = 0;
|
|
165
|
+
const chain = async () => {
|
|
166
|
+
if (index >= this.middlewares.length)
|
|
167
|
+
return execute();
|
|
168
|
+
const middleware = this.middlewares[index];
|
|
169
|
+
index++;
|
|
170
|
+
if (middleware === undefined)
|
|
171
|
+
return execute();
|
|
172
|
+
return middleware(context, chain);
|
|
173
|
+
};
|
|
174
|
+
return chain();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export function createCacheStore(options) {
|
|
178
|
+
return new DefaultCacheStore(options);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/tags.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/cache — Tags
|
|
3
|
+
*
|
|
4
|
+
* Tag-based cache invalidation registry. Maps tags to cache keys,
|
|
5
|
+
* allowing bulk invalidation of related entries.
|
|
6
|
+
*/
|
|
7
|
+
import type { CacheClearResult, CacheKey, CacheTag, CacheTagOptions, CacheTagStore } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* In-memory implementation of `CacheTagStore`.
|
|
10
|
+
*
|
|
11
|
+
* Maintains a bidirectional mapping between tags and cache keys.
|
|
12
|
+
* For production use, this should be backed by a persistent store
|
|
13
|
+
* (e.g., Redis SETs).
|
|
14
|
+
*/
|
|
15
|
+
export declare class InMemoryTagStore implements CacheTagStore {
|
|
16
|
+
/** Tag → Set of keys */
|
|
17
|
+
private readonly tagToKeys;
|
|
18
|
+
/** Key → Set of tags */
|
|
19
|
+
private readonly keyToTags;
|
|
20
|
+
add(key: CacheKey, tags: readonly CacheTag[], _options?: CacheTagOptions): Promise<void>;
|
|
21
|
+
remove(key: CacheKey, tags: readonly CacheTag[], _options?: CacheTagOptions): Promise<void>;
|
|
22
|
+
getKeys(tag: CacheTag, _options?: CacheTagOptions): Promise<readonly CacheKey[]>;
|
|
23
|
+
invalidate(tag: CacheTag, _options?: CacheTagOptions): Promise<CacheClearResult>;
|
|
24
|
+
/** Returns all registered tags. */
|
|
25
|
+
tags(): readonly CacheTag[];
|
|
26
|
+
/** Returns the number of keys mapped to a tag. */
|
|
27
|
+
count(tag: CacheTag): number;
|
|
28
|
+
/** Returns all tags for a given key. */
|
|
29
|
+
tagsForKey(key: CacheKey): readonly CacheTag[];
|
|
30
|
+
/** Clears all tag mappings. */
|
|
31
|
+
clear(): void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates an in-memory tag store.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createTagStore(): InMemoryTagStore;
|
|
37
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EAER,QAAQ,EACR,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAMpB;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IACpD,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAEhE,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAI1D,GAAG,CACP,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAcf;IAIK,MAAM,CACV,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAQf;IAIK,OAAO,CACX,GAAG,EAAE,QAAQ,EACb,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAE9B;IAIK,UAAU,CACd,GAAG,EAAE,QAAQ,EACb,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAkB3B;IAID,mCAAmC;IACnC,IAAI,IAAI,SAAS,QAAQ,EAAE,CAE1B;IAED,kDAAkD;IAClD,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAE3B;IAED,wCAAwC;IACxC,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,CAE7C;IAED,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAGZ;CACF;AAMD;;GAEG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAEjD"}
|
package/dist/tags.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/cache — Tags
|
|
3
|
+
*
|
|
4
|
+
* Tag-based cache invalidation registry. Maps tags to cache keys,
|
|
5
|
+
* allowing bulk invalidation of related entries.
|
|
6
|
+
*/
|
|
7
|
+
/* -------------------------------------------------------------------------- */
|
|
8
|
+
/* In-Memory Tag Store */
|
|
9
|
+
/* -------------------------------------------------------------------------- */
|
|
10
|
+
/**
|
|
11
|
+
* In-memory implementation of `CacheTagStore`.
|
|
12
|
+
*
|
|
13
|
+
* Maintains a bidirectional mapping between tags and cache keys.
|
|
14
|
+
* For production use, this should be backed by a persistent store
|
|
15
|
+
* (e.g., Redis SETs).
|
|
16
|
+
*/
|
|
17
|
+
export class InMemoryTagStore {
|
|
18
|
+
/** Tag → Set of keys */
|
|
19
|
+
tagToKeys = new Map();
|
|
20
|
+
/** Key → Set of tags */
|
|
21
|
+
keyToTags = new Map();
|
|
22
|
+
/* ---- Add Tags ---- */
|
|
23
|
+
async add(key, tags, _options) {
|
|
24
|
+
for (const tag of tags) {
|
|
25
|
+
if (!this.tagToKeys.has(tag)) {
|
|
26
|
+
this.tagToKeys.set(tag, new Set());
|
|
27
|
+
}
|
|
28
|
+
this.tagToKeys.get(tag).add(key);
|
|
29
|
+
}
|
|
30
|
+
if (!this.keyToTags.has(key)) {
|
|
31
|
+
this.keyToTags.set(key, new Set());
|
|
32
|
+
}
|
|
33
|
+
for (const tag of tags) {
|
|
34
|
+
this.keyToTags.get(key).add(tag);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/* ---- Remove Tags ---- */
|
|
38
|
+
async remove(key, tags, _options) {
|
|
39
|
+
for (const tag of tags) {
|
|
40
|
+
this.tagToKeys.get(tag)?.delete(key);
|
|
41
|
+
}
|
|
42
|
+
for (const tag of tags) {
|
|
43
|
+
this.keyToTags.get(key)?.delete(tag);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/* ---- Get Keys by Tag ---- */
|
|
47
|
+
async getKeys(tag, _options) {
|
|
48
|
+
return [...(this.tagToKeys.get(tag) ?? [])];
|
|
49
|
+
}
|
|
50
|
+
/* ---- Invalidate by Tag ---- */
|
|
51
|
+
async invalidate(tag, _options) {
|
|
52
|
+
const keys = this.tagToKeys.get(tag);
|
|
53
|
+
if (!keys) {
|
|
54
|
+
return { cleared: 0 };
|
|
55
|
+
}
|
|
56
|
+
const count = keys.size;
|
|
57
|
+
// Remove reverse mappings
|
|
58
|
+
for (const key of keys) {
|
|
59
|
+
this.keyToTags.get(key)?.delete(tag);
|
|
60
|
+
}
|
|
61
|
+
// Clear the tag
|
|
62
|
+
this.tagToKeys.delete(tag);
|
|
63
|
+
return { cleared: count };
|
|
64
|
+
}
|
|
65
|
+
/* ---- Utility ---- */
|
|
66
|
+
/** Returns all registered tags. */
|
|
67
|
+
tags() {
|
|
68
|
+
return [...this.tagToKeys.keys()];
|
|
69
|
+
}
|
|
70
|
+
/** Returns the number of keys mapped to a tag. */
|
|
71
|
+
count(tag) {
|
|
72
|
+
return this.tagToKeys.get(tag)?.size ?? 0;
|
|
73
|
+
}
|
|
74
|
+
/** Returns all tags for a given key. */
|
|
75
|
+
tagsForKey(key) {
|
|
76
|
+
return [...(this.keyToTags.get(key) ?? [])];
|
|
77
|
+
}
|
|
78
|
+
/** Clears all tag mappings. */
|
|
79
|
+
clear() {
|
|
80
|
+
this.tagToKeys.clear();
|
|
81
|
+
this.keyToTags.clear();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/* -------------------------------------------------------------------------- */
|
|
85
|
+
/* Factory */
|
|
86
|
+
/* -------------------------------------------------------------------------- */
|
|
87
|
+
/**
|
|
88
|
+
* Creates an in-memory tag store.
|
|
89
|
+
*/
|
|
90
|
+
export function createTagStore() {
|
|
91
|
+
return new InMemoryTagStore();
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=tags.js.map
|
package/dist/tags.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CacheKey } from "./types-keys.js";
|
|
2
|
+
import type { CacheTTL } from "./types-values.js";
|
|
3
|
+
import type { CacheClearOptions, CacheDeleteManyOptions, CacheDeleteOptions, CacheGetManyOptions, CacheGetOptions, CacheHasOptions, CacheKeysOptions, CacheSetManyOptions, CacheSetOptions } from "./types-operations.js";
|
|
4
|
+
import type { CacheClearResult, CacheDeleteManyResult, CacheDeleteResult, CacheGetResult, CacheSetResult } from "./types-results.js";
|
|
5
|
+
export interface CacheAdapter {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
connect?(): Promise<void>;
|
|
8
|
+
disconnect?(): Promise<void>;
|
|
9
|
+
get<TValue = unknown>(key: CacheKey, options?: CacheGetOptions): Promise<CacheGetResult<TValue>>;
|
|
10
|
+
set<TValue = unknown>(key: CacheKey, value: TValue, options?: CacheSetOptions): Promise<CacheSetResult>;
|
|
11
|
+
delete(key: CacheKey, options?: CacheDeleteOptions): Promise<CacheDeleteResult>;
|
|
12
|
+
has(key: CacheKey, options?: CacheHasOptions): Promise<boolean>;
|
|
13
|
+
clear(options?: CacheClearOptions): Promise<CacheClearResult>;
|
|
14
|
+
keys?(options?: CacheKeysOptions): Promise<readonly CacheKey[]>;
|
|
15
|
+
getMany?<TValue = unknown>(keys: readonly CacheKey[], options?: CacheGetManyOptions): Promise<ReadonlyMap<CacheKey, CacheGetResult<TValue>>>;
|
|
16
|
+
setMany?<TValue = unknown>(entries: ReadonlyMap<CacheKey, TValue>, options?: CacheSetManyOptions): Promise<readonly CacheSetResult[]>;
|
|
17
|
+
deleteMany?(keys: readonly CacheKey[], options?: CacheDeleteManyOptions): Promise<CacheDeleteManyResult>;
|
|
18
|
+
ttl?(key: CacheKey, options?: CacheGetOptions): Promise<number | null>;
|
|
19
|
+
expire?(key: CacheKey, ttl: CacheTTL, options?: CacheGetOptions): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
export interface CacheStore extends CacheAdapter {
|
|
22
|
+
}
|
|
23
|
+
export type CacheAdapterFactory<TOptions = unknown> = (options: TOptions) => CacheAdapter | Promise<CacheAdapter>;
|
|
24
|
+
//# sourceMappingURL=types-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-adapter.d.ts","sourceRoot":"","sources":["../src/types-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,GAAG,CAAC,MAAM,GAAG,OAAO,EAClB,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,MAAM,GAAG,OAAO,EAClB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,MAAM,CACJ,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,MAAM,GAAG,OAAO,EACvB,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,MAAM,GAAG,OAAO,EACvB,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IACtC,UAAU,CAAC,CACT,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,CACL,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY;CAAG;AAEnD,MAAM,MAAM,mBAAmB,CAAC,QAAQ,GAAG,OAAO,IAAI,CACpD,OAAO,EAAE,QAAQ,KACd,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-adapter.js","sourceRoot":"","sources":["../src/types-adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CacheNamespace } from "./types-keys.js";
|
|
2
|
+
import type { CacheTTL } from "./types-values.js";
|
|
3
|
+
import type { CacheOperation } from "./types-metrics.js";
|
|
4
|
+
export interface CacheConfig {
|
|
5
|
+
readonly enabled?: boolean;
|
|
6
|
+
readonly defaultTtl?: CacheTTL;
|
|
7
|
+
readonly namespace?: CacheNamespace;
|
|
8
|
+
readonly prefix?: string;
|
|
9
|
+
readonly separator?: string;
|
|
10
|
+
readonly failSilently?: boolean;
|
|
11
|
+
readonly collectStats?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export type CacheErrorCode = "CACHE_DISABLED" | "CACHE_CONNECTION_FAILED" | "CACHE_TIMEOUT" | "CACHE_SERIALIZATION_FAILED" | "CACHE_DESERIALIZATION_FAILED" | "CACHE_OPERATION_FAILED" | "CACHE_INVALID_KEY" | "CACHE_INVALID_TTL" | "CACHE_ADAPTER_NOT_CONFIGURED" | "CACHE_NOT_SUPPORTED";
|
|
14
|
+
export interface CacheErrorOptions {
|
|
15
|
+
readonly cause?: unknown;
|
|
16
|
+
readonly details?: Readonly<Record<string, unknown>>;
|
|
17
|
+
readonly operation?: CacheOperation;
|
|
18
|
+
readonly key?: CacheKey;
|
|
19
|
+
}
|
|
20
|
+
import type { CacheKey } from "./types-keys.js";
|
|
21
|
+
//# sourceMappingURL=types-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-config.d.ts","sourceRoot":"","sources":["../src/types-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,yBAAyB,GACzB,eAAe,GACf,4BAA4B,GAC5B,8BAA8B,GAC9B,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,8BAA8B,GAC9B,qBAAqB,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-config.js","sourceRoot":"","sources":["../src/types-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CacheKey } from "./types-keys.js";
|
|
2
|
+
import type { CacheTTL } from "./types-values.js";
|
|
3
|
+
export type CacheEventType = "cache.hit" | "cache.miss" | "cache.set" | "cache.delete" | "cache.clear" | "cache.error";
|
|
4
|
+
export interface BaseCacheEvent {
|
|
5
|
+
readonly type: CacheEventType;
|
|
6
|
+
readonly key?: CacheKey;
|
|
7
|
+
readonly occurredAt: Date;
|
|
8
|
+
}
|
|
9
|
+
export interface CacheHitEvent extends BaseCacheEvent {
|
|
10
|
+
readonly type: "cache.hit";
|
|
11
|
+
readonly latencyMs?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CacheMissEvent extends BaseCacheEvent {
|
|
14
|
+
readonly type: "cache.miss";
|
|
15
|
+
readonly latencyMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface CacheSetEvent extends BaseCacheEvent {
|
|
18
|
+
readonly type: "cache.set";
|
|
19
|
+
readonly ttl?: CacheTTL;
|
|
20
|
+
}
|
|
21
|
+
export interface CacheDeleteEvent extends BaseCacheEvent {
|
|
22
|
+
readonly type: "cache.delete";
|
|
23
|
+
readonly deleted: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface CacheClearEvent extends BaseCacheEvent {
|
|
26
|
+
readonly type: "cache.clear";
|
|
27
|
+
readonly cleared: number;
|
|
28
|
+
}
|
|
29
|
+
export interface CacheErrorEvent extends BaseCacheEvent {
|
|
30
|
+
readonly type: "cache.error";
|
|
31
|
+
readonly error: unknown;
|
|
32
|
+
}
|
|
33
|
+
export type CacheEvent = CacheHitEvent | CacheMissEvent | CacheSetEvent | CacheDeleteEvent | CacheClearEvent | CacheErrorEvent;
|
|
34
|
+
export type CacheEventHandler<TEvent extends CacheEvent = CacheEvent> = (event: TEvent) => void | Promise<void>;
|
|
35
|
+
export interface CacheEventSubscription {
|
|
36
|
+
readonly unsubscribe: () => void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-events.d.ts","sourceRoot":"","sources":["../src/types-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,YAAY,GACZ,WAAW,GACX,cAAc,GACd,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,eAAe,CAAC;AAEpB,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,IAAI,CACtE,KAAK,EAAE,MAAM,KACV,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-events.js","sourceRoot":"","sources":["../src/types-events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface CacheHealth {
|
|
2
|
+
readonly healthy: boolean;
|
|
3
|
+
readonly adapter: string;
|
|
4
|
+
readonly latencyMs?: number;
|
|
5
|
+
readonly checkedAt: Date;
|
|
6
|
+
readonly error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CacheHealthChecker {
|
|
9
|
+
healthCheck(): Promise<CacheHealth>;
|
|
10
|
+
}
|
|
11
|
+
export interface CacheSerializer<TValue = unknown, TSerialized = unknown> {
|
|
12
|
+
serialize(value: TValue): TSerialized;
|
|
13
|
+
deserialize(value: TSerialized): TValue;
|
|
14
|
+
}
|
|
15
|
+
export interface CacheSerializationOptions {
|
|
16
|
+
readonly serializer?: CacheSerializer;
|
|
17
|
+
readonly compress?: boolean;
|
|
18
|
+
readonly encryption?: boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-health.d.ts","sourceRoot":"","sources":["../src/types-health.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,WAAW,GAAG,OAAO;IACtE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IACtC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-health.js","sourceRoot":"","sources":["../src/types-health.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type CacheKey = string;
|
|
2
|
+
export type CacheNamespace = string;
|
|
3
|
+
export interface CacheKeyParts {
|
|
4
|
+
readonly namespace?: CacheNamespace;
|
|
5
|
+
readonly key: CacheKey;
|
|
6
|
+
}
|
|
7
|
+
export interface CacheKeyOptions {
|
|
8
|
+
readonly namespace?: CacheNamespace;
|
|
9
|
+
readonly prefix?: string;
|
|
10
|
+
readonly separator?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CacheKeyBuilder {
|
|
13
|
+
build(key: string, options?: CacheKeyOptions): CacheKey;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-keys.d.ts","sourceRoot":"","sources":["../src/types-keys.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC;CACzD"}
|