{"version":3,"sources":["../src/cache-core.ts","../src/encode-core.ts"],"sourcesContent":["/* istanbul ignore file */\r\n\r\nimport { clear, createStore, del, get, set, UseStore } from \"idb-keyval\";\r\n\r\nimport { EncodeCore, EncodeCoreConfig } from \"./encode-core\";\r\n\r\nexport class CacheCore<\r\n  CacheDataType,\r\n  EncodeDataType extends any[]\r\n> extends EncodeCore<EncodeDataType> {\r\n  protected readonly _cacheStore: UseStore | undefined;\r\n\r\n  constructor(protected _cacheConfig: CacheCoreConfig) {\r\n    super({ getParamsString: _cacheConfig.getParamsString });\r\n\r\n    try {\r\n      this._cacheStore = this._cacheConfig?.enableCache\r\n        ? createStore(\r\n            this._cacheConfig?.cacheId ?? \"db-default\",\r\n            \"store-default\"\r\n          )\r\n        : undefined;\r\n    } catch (error) {\r\n      // console.error(error);\r\n    }\r\n  }\r\n\r\n  async _getCache(\r\n    cacheKey: string\r\n  ): Promise<TypeCacheRecord<CacheDataType> | undefined> {\r\n    if (!this._cacheConfig.enableCache || !this._cacheStore) return undefined;\r\n\r\n    const cache: TypeCacheRecord<CacheDataType> | undefined = await get(\r\n      cacheKey,\r\n      this._cacheStore\r\n    );\r\n\r\n    return this._isCacheExpired(cache) ? undefined : cache;\r\n  }\r\n\r\n  async _setCache(cacheKey: string, value: TypeCacheRecord<CacheDataType>) {\r\n    if (!this._cacheConfig.enableCache || !this._cacheStore) return;\r\n\r\n    try {\r\n      await set(cacheKey, value, this._cacheStore);\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  }\r\n\r\n  /* istanbul ignore next */\r\n  public async deleteCache(cacheKey: string) {\r\n    if (this._cacheStore) del(cacheKey, this._cacheStore);\r\n  }\r\n\r\n  /* istanbul ignore next */\r\n  public async clearCache() {\r\n    if (this._cacheStore) clear(this._cacheStore);\r\n  }\r\n\r\n  protected _isCacheExpired(cache: TypeCacheRecord<CacheDataType> | undefined) {\r\n    return (\r\n      !!cache &&\r\n      !!this._cacheConfig.cacheExpiry &&\r\n      this._cacheConfig.cacheExpiry > 0 &&\r\n      Date.now() - cache.updatedAt > this._cacheConfig.cacheExpiry\r\n    );\r\n  }\r\n\r\n  // protected _isCachePreventNewRequest(\r\n  //   cache: TypeCacheRecord<CacheDataType> | undefined\r\n  // ) {\r\n  //   return (\r\n  //     !!cache &&\r\n  //     !!this._cacheConfig.cachePreventNewRequestDuration &&\r\n  //     this._cacheConfig.cachePreventNewRequestDuration > 0 &&\r\n  //     Date.now() - cache.updatedAt < this._cacheConfig.cachePreventNewRequestDuration\r\n  //   );\r\n  // }\r\n}\r\n\r\nexport type TypeCacheRecord<T> = {\r\n  data: T;\r\n  updatedAt: number;\r\n};\r\n\r\nexport type CacheCoreConfig = {\r\n  enableCache?: boolean;\r\n  cacheExpiry?: number;\r\n  cacheId?: string;\r\n\r\n  // cachePreventNewRequestDuration?: number;\r\n} & EncodeCoreConfig<any[]>;\r\n","import MD5 from \"crypto-js/md5.js\";\r\n\r\nexport class EncodeCore<EncodeDataType extends any[]> {\r\n  constructor(protected _encodeConfig: EncodeCoreConfig<EncodeDataType>) {}\r\n\r\n  protected _getHash(parameters: EncodeDataType) {\r\n    const length = parameters.length;\r\n\r\n    return MD5(\r\n      this._encodeConfig.getParamsString\r\n        ? this._encodeConfig.getParamsString(...parameters)\r\n        : length === 0\r\n        ? \"default\"\r\n        : length === 1 && typeof parameters[0] === \"object\"\r\n        ? EncodeCore.getObjectUniqueString(parameters[0])\r\n        : JSON.stringify(parameters)\r\n    ).toString();\r\n  }\r\n\r\n  static getObjectUniqueString(object: Record<string, any>) {\r\n    return JSON.stringify(\r\n      Object.entries(object).sort(([key1], [key2]) => key1.localeCompare(key2))\r\n    );\r\n  }\r\n}\r\n\r\nexport type EncodeCoreConfig<EncodeDataType extends any[]> = {\r\n  getParamsString?: (...params: EncodeDataType) => string;\r\n};\r\n"],"mappings":"AAEA,OAAS,SAAAA,EAAO,eAAAC,EAAa,OAAAC,EAAK,OAAAC,EAAK,OAAAC,MAAqB,aCF5D,OAAOC,MAAS,mBAET,IAAMC,EAAN,MAAMC,CAAyC,CACpD,YAAsBC,EAAiD,CAAjD,mBAAAA,CAAkD,CAE9D,SAASC,EAA4B,CAC7C,IAAMC,EAASD,EAAW,OAE1B,OAAOJ,EACL,KAAK,cAAc,gBACf,KAAK,cAAc,gBAAgB,GAAGI,CAAU,EAChDC,IAAW,EACX,UACAA,IAAW,GAAK,OAAOD,EAAW,CAAC,GAAM,SACzCF,EAAW,sBAAsBE,EAAW,CAAC,CAAC,EAC9C,KAAK,UAAUA,CAAU,CAC/B,EAAE,SAAS,CACb,CAEA,OAAO,sBAAsBE,EAA6B,CACxD,OAAO,KAAK,UACV,OAAO,QAAQA,CAAM,EAAE,KAAK,CAAC,CAACC,CAAI,EAAG,CAACC,CAAI,IAAMD,EAAK,cAAcC,CAAI,CAAC,CAC1E,CACF,CACF,EDlBO,IAAMC,EAAN,cAGGC,CAA2B,CAGnC,YAAsBC,EAA+B,CACnD,MAAM,CAAE,gBAAiBA,EAAa,eAAgB,CAAC,EADnC,kBAAAA,EAGpB,GAAI,CACF,KAAK,YAAc,KAAK,cAAc,YAClCC,EACE,KAAK,cAAc,SAAW,aAC9B,eACF,EACA,MACN,MAAgB,CAEhB,CACF,CAfmB,YAiBnB,MAAM,UACJC,EACqD,CACrD,GAAI,CAAC,KAAK,aAAa,aAAe,CAAC,KAAK,YAAa,OAEzD,IAAMC,EAAoD,MAAMC,EAC9DF,EACA,KAAK,WACP,EAEA,OAAO,KAAK,gBAAgBC,CAAK,EAAI,OAAYA,CACnD,CAEA,MAAM,UAAUD,EAAkBG,EAAuC,CACvE,GAAI,GAAC,KAAK,aAAa,aAAe,CAAC,KAAK,aAE5C,GAAI,CACF,MAAMC,EAAIJ,EAAUG,EAAO,KAAK,WAAW,CAC7C,OAASE,EAAO,CACd,QAAQ,MAAMA,CAAK,CACrB,CACF,CAGA,MAAa,YAAYL,EAAkB,CACrC,KAAK,aAAaM,EAAIN,EAAU,KAAK,WAAW,CACtD,CAGA,MAAa,YAAa,CACpB,KAAK,aAAaO,EAAM,KAAK,WAAW,CAC9C,CAEU,gBAAgBN,EAAmD,CAC3E,MACE,CAAC,CAACA,GACF,CAAC,CAAC,KAAK,aAAa,aACpB,KAAK,aAAa,YAAc,GAChC,KAAK,IAAI,EAAIA,EAAM,UAAY,KAAK,aAAa,WAErD,CAYF","names":["clear","createStore","del","get","set","MD5","EncodeCore","_EncodeCore","_encodeConfig","parameters","length","object","key1","key2","CacheCore","EncodeCore","_cacheConfig","createStore","cacheKey","cache","get","value","set","error","del","clear"]}