UNPKG

flat-cache

Version:

A simple key/value storage using files to persist the data

255 lines (252 loc) 7.96 kB
import { CacheableMemory } from 'cacheable'; import { Hookified } from 'hookified'; type FlatCacheOptions = { ttl?: number | string; useClone?: boolean; lruSize?: number; expirationInterval?: number; persistInterval?: number; cacheDir?: string; cacheId?: string; deserialize?: (data: string) => any; serialize?: (data: any) => string; }; declare enum FlatCacheEvents { SAVE = "save", LOAD = "load", DELETE = "delete", CLEAR = "clear", DESTROY = "destroy", ERROR = "error", EXPIRED = "expired" } declare class FlatCache extends Hookified { private readonly _cache; private _cacheDir; private _cacheId; private _persistInterval; private _persistTimer; private _changesSinceLastSave; private readonly _parse; private readonly _stringify; constructor(options?: FlatCacheOptions); /** * The cache object * @property cache * @type {CacheableMemory} */ get cache(): CacheableMemory; /** * The cache directory * @property cacheDir * @type {String} * @default '.cache' */ get cacheDir(): string; /** * Set the cache directory * @property cacheDir * @type {String} * @default '.cache' */ set cacheDir(value: string); /** * The cache id * @property cacheId * @type {String} * @default 'cache1' */ get cacheId(): string; /** * Set the cache id * @property cacheId * @type {String} * @default 'cache1' */ set cacheId(value: string); /** * The flag to indicate if there are changes since the last save * @property changesSinceLastSave * @type {Boolean} * @default false */ get changesSinceLastSave(): boolean; /** * The interval to persist the cache to disk. 0 means no timed persistence * @property persistInterval * @type {Number} * @default 0 */ get persistInterval(): number; /** * Set the interval to persist the cache to disk. 0 means no timed persistence * @property persistInterval * @type {Number} * @default 0 */ set persistInterval(value: number); /** * Load a cache identified by the given Id. If the element does not exists, then initialize an empty * cache storage. If specified `cacheDir` will be used as the directory to persist the data to. If omitted * then the cache module directory `.cacheDir` will be used instead * * @method load * @param cacheId {String} the id of the cache, would also be used as the name of the file cache * @param cacheDir {String} directory for the cache entry */ load(cacheId?: string, cacheDir?: string): void; /** * Load the cache from the provided file * @method loadFile * @param {String} pathToFile the path to the file containing the info for the cache */ loadFile(pathToFile: string): void; /** * Returns the entire persisted object * @method all * @returns {*} */ all(): Record<string, any>; /** * Returns an array with all the items in the cache { key, value, ttl } * @method items * @returns {Array} */ get items(): { key: string; value: any; expires?: number; }[]; /** * Returns the path to the file where the cache is persisted * @method cacheFilePath * @returns {String} */ get cacheFilePath(): string; /** * Returns the path to the cache directory * @method cacheDirPath * @returns {String} */ get cacheDirPath(): string; /** * Returns an array with all the keys in the cache * @method keys * @returns {Array} */ keys(): string[]; /** * (Legacy) set key method. This method will be deprecated in the future * @method setKey * @param key {string} the key to set * @param value {object} the value of the key. Could be any object that can be serialized with JSON.stringify */ setKey(key: string, value: any, ttl?: number | string): void; /** * Sets a key to a given value * @method set * @param key {string} the key to set * @param value {object} the value of the key. Could be any object that can be serialized with JSON.stringify * @param [ttl] {number} the time to live in milliseconds */ set(key: string, value: any, ttl?: number | string): void; /** * (Legacy) Remove a given key from the cache. This method will be deprecated in the future * @method removeKey * @param key {String} the key to remove from the object */ removeKey(key: string): void; /** * Remove a given key from the cache * @method delete * @param key {String} the key to remove from the object */ delete(key: string): void; /** * (Legacy) Return the value of the provided key. This method will be deprecated in the future * @method getKey<T> * @param key {String} the name of the key to retrieve * @returns {*} at T the value from the key */ getKey<T>(key: string): T; /** * Return the value of the provided key * @method get<T> * @param key {String} the name of the key to retrieve * @returns {*} at T the value from the key */ get<T>(key: string): T; /** * Clear the cache and save the state to disk * @method clear */ clear(): void; /** * Save the state of the cache identified by the docId to disk * as a JSON structure * @method save */ save(force?: boolean): void; /** * Remove the file where the cache is persisted * @method removeCacheFile * @return {Boolean} true or false if the file was successfully deleted */ removeCacheFile(): boolean; /** * Destroy the cache. This will remove the directory, file, and memory cache * @method destroy * @param [includeCacheDir=false] {Boolean} if true, the cache directory will be removed * @return {undefined} */ destroy(includeCacheDirectory?: boolean): void; /** * Start the auto persist interval * @method startAutoPersist */ startAutoPersist(): void; /** * Stop the auto persist interval * @method stopAutoPersist */ stopAutoPersist(): void; } declare class FlatCacheDefault { static create: typeof create; static createFromFile: typeof createFromFile; static clearCacheById: typeof clearCacheById; static clearAll: typeof clearAll; } /** * Load a cache identified by the given Id. If the element does not exists, then initialize an empty * cache storage. * * @method create * @param docId {String} the id of the cache, would also be used as the name of the file cache * @param cacheDirectory {String} directory for the cache entry * @param options {FlatCacheOptions} options for the cache * @returns {cache} cache instance */ declare function create(options?: FlatCacheOptions): FlatCache; /** * Load a cache from the provided file * @method createFromFile * @param {String} filePath the path to the file containing the info for the cache * @param options {FlatCacheOptions} options for the cache * @returns {cache} cache instance */ declare function createFromFile(filePath: string, options?: FlatCacheOptions): FlatCache; /** * Clear the cache identified by the given Id * @method clearCacheById * @param cacheId {String} the id of the cache * @param cacheDirectory {String} directory for the cache entry */ declare function clearCacheById(cacheId: string, cacheDirectory?: string): void; /** * Clear the cache directory * @method clearAll * @param cacheDir {String} directory for the cache entry */ declare function clearAll(cacheDirectory?: string): void; export { FlatCache, FlatCacheEvents, type FlatCacheOptions, clearAll, clearCacheById, create, createFromFile, FlatCacheDefault as default };