Added localStorage support to cache
This commit is contained in:
parent
23df6ad265
commit
494cfaaccd
5753
package-lock.json
generated
5753
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ztimson/utils",
|
"name": "@ztimson/utils",
|
||||||
"version": "0.19.2",
|
"version": "0.20.0",
|
||||||
"description": "Utility library",
|
"description": "Utility library",
|
||||||
"author": "Zak Timson",
|
"author": "Zak Timson",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -38,8 +38,5 @@
|
|||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
]
|
||||||
"dependencies": {
|
|
||||||
"var-persist": "^1.0.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
32
src/cache.ts
32
src/cache.ts
@ -1,3 +1,12 @@
|
|||||||
|
export type CacheOptions = {
|
||||||
|
/** Delete keys automatically after x amount of seconds */
|
||||||
|
ttl?: number;
|
||||||
|
/** Storage to persist cache */
|
||||||
|
storage?: Storage;
|
||||||
|
/** Key cache will be stored under */
|
||||||
|
storageKey?: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map of data which tracks whether it is a complete collection & offers optional expiry of cached values
|
* Map of data which tracks whether it is a complete collection & offers optional expiry of cached values
|
||||||
*/
|
*/
|
||||||
@ -13,9 +22,18 @@ export class Cache<K extends string | number | symbol, T> {
|
|||||||
* Create new cache
|
* Create new cache
|
||||||
*
|
*
|
||||||
* @param {keyof T} key Default property to use as primary key
|
* @param {keyof T} key Default property to use as primary key
|
||||||
* @param {number} ttl Default expiry in milliseconds
|
* @param options
|
||||||
*/
|
*/
|
||||||
constructor(public readonly key?: keyof T, public ttl?: number) {
|
constructor(public readonly key?: keyof T, public readonly options: CacheOptions = {}) {
|
||||||
|
if(options.storageKey && !options.storage)
|
||||||
|
options.storage = localStorage;
|
||||||
|
if(options.storageKey && options.storage) {
|
||||||
|
const stored = options.storage.getItem(options.storageKey);
|
||||||
|
if(stored) {
|
||||||
|
try { Object.assign(this.store, JSON.parse(stored)); }
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
return new Proxy(this, {
|
return new Proxy(this, {
|
||||||
get: (target: this, prop: string | symbol) => {
|
get: (target: this, prop: string | symbol) => {
|
||||||
if (prop in target) return (target as any)[prop];
|
if (prop in target) return (target as any)[prop];
|
||||||
@ -76,6 +94,8 @@ export class Cache<K extends string | number | symbol, T> {
|
|||||||
*/
|
*/
|
||||||
delete(key: K) {
|
delete(key: K) {
|
||||||
delete this.store[key];
|
delete this.store[key];
|
||||||
|
if(this.options.storageKey && this.options.storage)
|
||||||
|
this.options.storage.setItem(this.options.storageKey, JSON.stringify(this.cache));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,15 +138,17 @@ export class Cache<K extends string | number | symbol, T> {
|
|||||||
*
|
*
|
||||||
* @param {K} key Key item will be cached under
|
* @param {K} key Key item will be cached under
|
||||||
* @param {T} value Item to cache
|
* @param {T} value Item to cache
|
||||||
* @param {number | undefined} ttl Override default expiry
|
* @param {number | undefined} ttl Override default expiry in seconds
|
||||||
* @return {this}
|
* @return {this}
|
||||||
*/
|
*/
|
||||||
set(key: K, value: T, ttl = this.ttl): this {
|
set(key: K, value: T, ttl = this.options.ttl): this {
|
||||||
this.store[key] = value;
|
this.store[key] = value;
|
||||||
|
if(this.options.storageKey && this.options.storage)
|
||||||
|
this.options.storage.setItem(this.options.storageKey, JSON.stringify(this.cache));
|
||||||
if(ttl) setTimeout(() => {
|
if(ttl) setTimeout(() => {
|
||||||
this.complete = false;
|
this.complete = false;
|
||||||
this.delete(key);
|
this.delete(key);
|
||||||
}, ttl);
|
}, ttl * 1000);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,4 +16,3 @@ export * from './promise-progress';
|
|||||||
export * from './string';
|
export * from './string';
|
||||||
export * from './time';
|
export * from './time';
|
||||||
export * from './types';
|
export * from './types';
|
||||||
export * from 'var-persist';
|
|
||||||
|
Loading…
Reference in New Issue
Block a user