@ringcentral/sdk
Version:
- [Installation](#installation) - [Getting Started](#getting-started) - [API Calls](#api-calls) - [Advanced SDK Configuration & Polyfills](#advanced-sdk-configuration--polyfills) - [Making telephony calls](#making-telephony-calls) - [Call mana
75 lines (59 loc) • 2.08 kB
text/typescript
import Externals from './Externals';
export interface CacheOptions {
prefix?: string;
externals: Externals;
}
export default class Cache {
public static defaultPrefix = 'rc-';
private readonly _prefix = null;
private _externals = null;
public constructor({prefix = Cache.defaultPrefix, externals}: CacheOptions) {
this._prefix = prefix;
this._externals = externals;
}
public setItemSync(key, data) {
this._externals.localStorage.setItem(this._prefixKey(key), JSON.stringify(data));
return this;
}
public async setItem(key, data) {
await this._externals.localStorage.setItem(this._prefixKey(key), JSON.stringify(data));
//this.setItemSync(key, data);
}
public removeItemSync(key) {
this._externals.localStorage.removeItem(this._prefixKey(key));
return this;
}
public async removeItem(key) {
await this._externals.localStorage.removeItem(this._prefixKey(key));
//await this.removeItemSync(key);
}
public getItemSync(key) {
const item = this._externals.localStorage.getItem(this._prefixKey(key));
if (!item) {return null;}
return JSON.parse(item);
}
public async getItem(key) {
const item = await this._externals.localStorage.getItem(this._prefixKey(key));
if (!item) {return null;}
return JSON.parse(item);
// return this.getItemSync(key);
}
private async _keys(): Promise<string[]> {
return 'keys' in this._externals.localStorage
? this._externals.localStorage.keys() // could be async
: Object.keys(this._externals.localStorage);
}
public async clean() {
await Promise.all(
(await this._keys()).map(async key => {
if (key.startsWith(this._prefix)) {
await this._externals.localStorage.removeItem(key);
}
}),
);
return this;
}
private _prefixKey(key: string) {
return this._prefix + key;
}
}