keyv-cache-proxy
Advanced tools
+6
-5
@@ -116,3 +116,3 @@ import type Keyv from "keyv"; | ||
| skip: true; | ||
| } | undefined>; | ||
| } | void>; | ||
| /** | ||
@@ -130,9 +130,10 @@ * Called when data is freshly fetched. Receives key and fetched value, can return modified value before caching. | ||
| skip: true; | ||
| } | undefined>; | ||
| } | void>; | ||
| /** Prefix of keys */ | ||
| prefix?: string; | ||
| }): <T extends object>(obj: T) => DeepAsyncMethod<T>; | ||
| export type DeepAsyncMethod<T> = { | ||
| [K in keyof T]: T[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : T[K] extends object ? DeepAsyncMethod<T[K]> : T[K]; | ||
| }; | ||
| type IsPrimitive<T> = T extends string | number | boolean | symbol | bigint | null | undefined | Function | Array<any> | Date | RegExp | Promise<any> | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any> ? true : false; | ||
| export type DeepAsyncMethod<T> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : IsPrimitive<T> extends true ? T : T extends object ? { | ||
| [K in keyof T]: DeepAsyncMethod<T[K]>; | ||
| } : T; | ||
| /** | ||
@@ -139,0 +140,0 @@ * utils: globalThisCached |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAE7C,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,IAAI,GAAG,gBAAgB,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,SAAS,CAAC;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAC/F;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,KACP,SAAS,CAAC;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAC1E,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,IAGS,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,KAAG,eAAe,CAAC,CAAC,CAAC,CAuEtD;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;KAC9B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACtD,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACnC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACrB,CAAC,CAAC,CAAC,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAcrE"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAE7C,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,IAAI,GAAG,gBAAgB,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,SAAS,CAAC;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1F;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,KACP,SAAS,CAAC;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,IAGS,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,KAAG,eAAe,CAAC,CAAC,CAAC,CAkFtD;AAKD,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SACnB,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,QAAQ,GACR,KAAK,CAAC,GAAG,CAAC,GACV,IAAI,GACJ,MAAM,GACN,OAAO,CAAC,GAAG,CAAC,GACZ,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GACb,GAAG,CAAC,GAAG,CAAC,GACR,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GACjB,OAAO,CAAC,GAAG,CAAC,GACZ,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACpE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACnC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,GACzB,CAAC,GACD,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzC,CAAC,CAAC;AAEV;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAcrE"} |
+69
-61
@@ -100,70 +100,78 @@ /** | ||
| const { store, ttl, onCached, onFetched, prefix = "" } = options; | ||
| return (obj) => new Proxy(obj, { | ||
| get(target, prop, receiver) { | ||
| // handle wrap method calls with caching | ||
| const val = target[prop]; | ||
| if (typeof val === "function") { | ||
| const method = val.bind(obj); | ||
| return async (...args) => { | ||
| const key = `${prefix}${String(prop)}(${args.map((arg) => JSON.stringify(arg)).join(",")})`; | ||
| // Check cache | ||
| let cached = await store.get(key); | ||
| if (onCached) { | ||
| const modified = await onCached(key, cached); | ||
| if (modified !== undefined && typeof modified === "object" && modified !== null) { | ||
| if ("skip" in modified && modified.skip) { | ||
| // Treat as cache miss | ||
| cached = undefined; | ||
| return (obj) => { | ||
| // Cache for nested proxies - ensures lazy loading only creates each proxy once | ||
| const proxyCache = new Map(); | ||
| return new Proxy(obj, { | ||
| get(target, prop, receiver) { | ||
| // handle wrap method calls with caching | ||
| const val = target[prop]; | ||
| if (typeof val === "function") { | ||
| const method = val.bind(obj); | ||
| return async (...args) => { | ||
| const key = `${prefix}${String(prop)}(${args.map((arg) => JSON.stringify(arg)).join(",")})`; | ||
| // Check cache | ||
| let cached = await store.get(key); | ||
| if (onCached) { | ||
| const modified = await onCached(key, cached); | ||
| if (modified !== undefined && typeof modified === "object" && modified !== null) { | ||
| if ("skip" in modified && modified.skip) { | ||
| // Treat as cache miss | ||
| cached = undefined; | ||
| } | ||
| else if ("data" in modified) { | ||
| // Return modified data | ||
| return modified.data; | ||
| } | ||
| // If modified is {} without skip or data, continue with original cached value | ||
| } | ||
| else if ("data" in modified) { | ||
| // Return modified data | ||
| return modified.data; | ||
| } | ||
| // If modified is {} without skip or data, continue with original cached value | ||
| } | ||
| } | ||
| if (cached !== undefined) { | ||
| return cached; | ||
| } | ||
| // Fetch fresh data | ||
| let result = await method(...args); // call original method | ||
| let customTtl = ttl; | ||
| // onFetched hook - can modify result before caching | ||
| if (onFetched) { | ||
| const modified = await onFetched(key, result); | ||
| if (modified !== undefined && typeof modified === "object" && modified !== null) { | ||
| if ("skip" in modified && modified.skip) { | ||
| // Skip caching, but still return the fetched value | ||
| return result; | ||
| } | ||
| else if ("data" in modified || "ttl" in modified) { | ||
| // Use modified data and/or custom TTL | ||
| if ("data" in modified && modified.data !== undefined) { | ||
| result = modified.data; | ||
| if (cached !== undefined) { | ||
| return cached; | ||
| } | ||
| // Fetch fresh data | ||
| let result = await method(...args); // call original method | ||
| let customTtl = ttl; | ||
| // onFetched hook - can modify result before caching | ||
| if (onFetched) { | ||
| const modified = await onFetched(key, result); | ||
| if (modified !== undefined && typeof modified === "object" && modified !== null) { | ||
| if ("skip" in modified && modified.skip) { | ||
| // Skip caching, but still return the fetched value | ||
| return result; | ||
| } | ||
| if ("ttl" in modified && modified.ttl !== undefined) { | ||
| customTtl = modified.ttl; | ||
| else if ("data" in modified || "ttl" in modified) { | ||
| // Use modified data and/or custom TTL | ||
| if ("data" in modified && modified.data !== undefined) { | ||
| result = modified.data; | ||
| } | ||
| if ("ttl" in modified && modified.ttl !== undefined) { | ||
| customTtl = modified.ttl; | ||
| } | ||
| } | ||
| // If modified is {} without skip/data/ttl, use original result with default TTL | ||
| } | ||
| // If modified is {} without skip/data/ttl, use original result with default TTL | ||
| } | ||
| await store.set(key, result, customTtl); | ||
| return result; | ||
| }; | ||
| } | ||
| // deep proxy for nested objects - lazy loading with cache | ||
| if (typeof val === "object" && val !== null) { | ||
| // Check if we've already created a proxy for this property | ||
| if (!proxyCache.has(prop)) { | ||
| proxyCache.set(prop, KeyvCacheProxy({ | ||
| store, | ||
| ttl, | ||
| onCached, | ||
| onFetched, | ||
| prefix: `${prefix}${String(prop)}.`, | ||
| })(val)); | ||
| } | ||
| await store.set(key, result, customTtl); | ||
| return result; | ||
| }; | ||
| } | ||
| // deep proxy for nested objects | ||
| if (typeof val === "object" && val !== null) { | ||
| return KeyvCacheProxy({ | ||
| store, | ||
| ttl, | ||
| onCached, | ||
| onFetched, | ||
| prefix: `${prefix}${String(prop)}.`, | ||
| })(val); | ||
| } | ||
| // return property value for non-function properties | ||
| return Reflect.get(target, prop, receiver); | ||
| }, | ||
| }); | ||
| return proxyCache.get(prop); | ||
| } | ||
| // return property value for non-function properties | ||
| return Reflect.get(target, prop, receiver); | ||
| }, | ||
| }); | ||
| }; | ||
| } | ||
@@ -170,0 +178,0 @@ /** |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAyBtC;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEjE,OAAO,CAAmB,GAAM,EAAsB,EAAE;QACtD,+EAA+E;QAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE/C,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;YACpB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;gBACxB,wCAAwC;gBACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAe,CAAC,CAAC;gBACpC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7B,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;wBAC9B,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;wBAE5F,cAAc;wBACd,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAClC,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;4BAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gCAChF,IAAI,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oCACxC,sBAAsB;oCACtB,MAAM,GAAG,SAAS,CAAC;gCACrB,CAAC;qCAAM,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;oCAC9B,uBAAuB;oCACvB,OAAO,QAAQ,CAAC,IAAI,CAAC;gCACvB,CAAC;gCACD,8EAA8E;4BAChF,CAAC;wBACH,CAAC;wBACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;4BACzB,OAAO,MAAM,CAAC;wBAChB,CAAC;wBAED,mBAAmB;wBACnB,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,uBAAuB;wBAC3D,IAAI,SAAS,GAAG,GAAG,CAAC;wBAEpB,oDAAoD;wBACpD,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;4BAC9C,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gCAChF,IAAI,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oCACxC,mDAAmD;oCACnD,OAAO,MAAM,CAAC;gCAChB,CAAC;qCAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;oCACnD,sCAAsC;oCACtC,IAAI,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wCACtD,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;oCACzB,CAAC;oCACD,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;wCACpD,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC;oCAC3B,CAAC;gCACH,CAAC;gCACD,gFAAgF;4BAClF,CAAC;wBACH,CAAC;wBAED,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBACxC,OAAO,MAAM,CAAC;oBAChB,CAAC,CAAC;gBACJ,CAAC;gBACD,0DAA0D;gBAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBAC5C,2DAA2D;oBAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1B,UAAU,CAAC,GAAG,CACZ,IAAI,EACJ,cAAc,CAAC;4BACb,KAAK;4BACL,GAAG;4BACH,QAAQ;4BACR,SAAS;4BACT,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;yBACpC,CAAC,CAAC,GAAG,CAAC,CACR,CAAC;oBACJ,CAAC;oBACD,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;gBACD,oDAAoD;gBACpD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;SACF,CAAuB,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC;AAiCD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAI,IAAY,EAAE,OAAgB;IAChE,MAAM,CAAC,GAAG,UAET,CAAC;IACF,CAAC,CAAC,iCAAiC,KAAK,IAAI,GAAG,EAAE,CAAC;IAElD,MAAM,KAAK,GAAG,CAAC,CAAC,iCAAiC,CAAC;IAClD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAM,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"} |
+8
-6
| { | ||
| "name": "keyv-cache-proxy", | ||
| "version": "0.2.0", | ||
| "version": "0.2.3", | ||
| "description": "A transparent caching proxy for any object using Keyv - automatically cache method calls with TTL support", | ||
@@ -44,5 +44,6 @@ "type": "module", | ||
| "devDependencies": { | ||
| "@biomejs/biome": "^2.3.8", | ||
| "@types/bun": "latest", | ||
| "standard-version": "^9.5.0" | ||
| "semantic-release": "^25.0.2", | ||
| "standard-version": "^9.5.0", | ||
| "oxlint": "latest" | ||
| }, | ||
@@ -56,5 +57,6 @@ "peerDependencies": { | ||
| "build": "tsc", | ||
| "fmt": "biome check --unsafe --write", | ||
| "prepack": "bun fmt && bun run build", | ||
| "release": "standard-version && git push --follow-tags && npm publish" | ||
| "test": "bun test", | ||
| "prepack": "bun run build", | ||
| "release": "standard-version && git push --follow-tags && npm publish", | ||
| "fix": "oxlint --fix" | ||
| }, | ||
@@ -61,0 +63,0 @@ "engines": { |
+11
-0
@@ -322,2 +322,13 @@ # keyv-cache-proxy | ||
| ## See Also | ||
| Other Keyv storage adapters by the same author: | ||
| - [keyv-github](https://github.com/snomiao/keyv-github) — GitHub repository adapter; each key is a file, commits are writes | ||
| - [keyv-sqlite](https://github.com/snomiao/keyv-sqlite) — SQLite storage adapter | ||
| - [keyv-mongodb-store](https://github.com/snomiao/keyv-mongodb-store) — MongoDB storage adapter | ||
| - [keyv-nedb-store](https://github.com/snomiao/keyv-nedb-store) — NeDB embedded file-based adapter | ||
| - [keyv-dir-store](https://github.com/snomiao/keyv-dir-store) — file-per-key directory adapter with TTL via mtime | ||
| - [keyv-nest](https://github.com/snomiao/keyv-nest) — hierarchical multi-layer caching adapter | ||
| ## License | ||
@@ -324,0 +335,0 @@ |
| #!/usr/bin/env bun --watch | ||
| export {}; | ||
| //# sourceMappingURL=github.d.ts.map |
| {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/examples/github.ts"],"names":[],"mappings":""} |
| #!/usr/bin/env bun --watch | ||
| import { Keyv } from "keyv"; | ||
| import { Octokit } from "octokit"; | ||
| import { KeyvCacheProxy } from "../src"; | ||
| const kv = new Keyv(); | ||
| const gh = KeyvCacheProxy({ | ||
| store: kv, | ||
| ttl: 600e3, | ||
| prefix: `github.`, | ||
| onHit: (key) => console.log(`Cache hit: ${key}`), | ||
| onMiss: (key) => console.log(`Cache miss: ${key}`), | ||
| })( | ||
| new Octokit({ | ||
| // auth | ||
| }).rest, | ||
| ); | ||
| console.log((await gh.repos.get({ owner: "snomiao", repo: "snomiao" })).data.html_url); | ||
| // prints: cache miss: github.repos.get:[{"owner":"snomiao","repo":"snomiao"}] | ||
| // returns fresh result | ||
| console.log((await gh.repos.get({ owner: "snomiao", repo: "snomiao" })).data.html_url); | ||
| // prints: cache hit: github.repos.get:[{"owner":"snomiao","repo":"snomiao"}] | ||
| // returns cached result | ||
| //# sourceMappingURL=github.js.map |
| {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/examples/github.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;AACtB,MAAM,EAAE,GAAG,cAAc,CAAC;IACzB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC;CAClD,CAAC,CACD,IAAI,OAAO,CAAC;AACX,OAAO;CACP,CAAC,CAAC,IAAI,CACP,CAAC;AAEF,OAAO,CAAC,GAAG,CACV,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CACzE,CAAC;AACF,8EAA8E;AAC9E,uBAAuB;AAEvB,OAAO,CAAC,GAAG,CACV,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CACzE,CAAC;AACF,6EAA6E;AAC7E,wBAAwB"} |
78347
0.34%345
3.29%4
33.33%11
-26.67%970
-1.72%