UNPKG

@ixily/activ

Version:

Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.

105 lines (87 loc) 2.61 kB
import { CacheProvider, ICacheStorage, ICacheStorageConfig } from '../activ-v4' import { CacheNodeMemoryStorageModule } from './cache-node-providers/memory-provider.module' import { CacheNodeRedisStorageModule } from './cache-node-providers/redis-provider.module' import { CacheNodeLevelStorageModule } from './cache-node-providers/level-provider.module.' import { CacheNodeNoneStorageModule } from './cache-node-providers/none-provider.module' const DEFAULT_EXPIRATION = 300 // 5 minutes const state: ICacheStorageConfig = { dbParams: undefined, isBrowser: false as boolean, module: null as any, } let dBProvider: CacheProvider | undefined = 'none' let storageModule: ICacheStorage const getStorageModule = (): ICacheStorage => { switch (dBProvider) { case 'redis': storageModule = CacheNodeRedisStorageModule break case 'memory': storageModule = CacheNodeMemoryStorageModule break case 'level': storageModule = CacheNodeLevelStorageModule break case 'none': storageModule = CacheNodeNoneStorageModule break default: storageModule = CacheNodeNoneStorageModule } return storageModule } const init = async () => { await config(state) storageModule = getStorageModule() await storageModule?.config(state) } const config = async (_config: ICacheStorageConfig) => { state.dbParams = _config.dbParams state.isBrowser = _config.isBrowser dBProvider = _config?.dbParams?.provider } export const addData = async <T>( key: string, data: T, expiration: number = DEFAULT_EXPIRATION, ): Promise<void> => { await init() await storageModule?.addData(key, data, expiration) } export const getData = async <T>(key: string): Promise<T | undefined> => { await init() return storageModule.getData(key) } export const updateData = async <T>( key: string, data: T, expiration: number = DEFAULT_EXPIRATION, ): Promise<void> => { await init() await storageModule?.updateData(key, data, expiration) } export const removeData = async (key: string): Promise<void> => { await init() await storageModule?.removeData(key) } export const removeDataByPattern = async (pattern: string): Promise<void> => { await init() if ((await storageModule?.removeDataByPattern) !== undefined) { await storageModule?.removeDataByPattern!(pattern) } else { throw new Error('removeDataByPattern is not defined') } } export const resetData = async (): Promise<void> => { await init() await storageModule?.resetData() } export const CacheNodeStorageModule: ICacheStorage = { config, addData, getData, updateData, removeData, removeDataByPattern, resetData, }