{"version":3,"sources":["../../../../src/cache/cache-entry/cache-entry.ts","../../../../src/serializers/json.ts"],"sourcesContent":["import { JsonSerializer } from '../../serializers/json';\n\n/**\n * Represents a cache entry stored inside a cache driver.\n */\nexport class CacheEntry {\n  /**\n   * The key of the cache item.\n   */\n  #key: string;\n\n  /**\n   * The value of the item.\n   */\n  #value: any;\n\n  /**\n   * The logical expiration is the time in miliseconds when the item\n   * will be considered expired. But, if grace period is enabled,\n   * the item will still be available for a while.\n   */\n  #logicalExpiration: number;\n\n  #earlyExpiration: number;\n\n  static #serializer = new JsonSerializer();\n\n  constructor(key: string, item: Record<string, any>) {\n    this.#key = key;\n    this.#value = item.value;\n    this.#logicalExpiration = item.logicalExpiration;\n    this.#earlyExpiration = item.earlyExpiration;\n  }\n\n  getValue() {\n    return this.#value;\n  }\n\n  getKey() {\n    return this.#key;\n  }\n\n  getLogicalExpiration() {\n    return this.#logicalExpiration;\n  }\n\n  getEarlyExpiration() {\n    return this.#earlyExpiration;\n  }\n\n  isLogicallyExpired() {\n    return Date.now() >= this.#logicalExpiration;\n  }\n\n  isEarlyExpired() {\n    if (!this.#earlyExpiration) {\n      return false;\n    }\n\n    if (this.isLogicallyExpired()) {\n      return false;\n    }\n\n    return Date.now() >= this.#earlyExpiration;\n  }\n\n  static fromDriver(key: string, item: string) {\n    return new CacheEntry(key, this.#serializer.deserialize(item));\n  }\n\n  applyFallbackDuration(duration: number) {\n    this.#logicalExpiration += duration;\n    this.#earlyExpiration = 0;\n    return this;\n  }\n\n  expire() {\n    this.#logicalExpiration = Date.now() - 100;\n    this.#earlyExpiration = 0;\n    return this;\n  }\n\n  serialize() {\n    return CacheEntry.#serializer.serialize({\n      value: this.#value,\n      logicalExpiration: this.#logicalExpiration,\n      earlyExpiration: this.#earlyExpiration,\n    });\n  }\n}\n","import type { CacheSerializer } from '../types/main';\n\n/**\n * Simple class to serialize and deserialize values using JSON\n */\nexport class JsonSerializer implements CacheSerializer {\n  serialize(value: unknown) {\n    return JSON.stringify(value);\n  }\n\n  deserialize(value: string) {\n    return JSON.parse(value);\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,IAAM,iBAAN,MAAgD;AAAA,EACrD,UAAU,OAAgB;AACxB,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAAA,EAEA,YAAY,OAAe;AACzB,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AACF;;;ADRO,IAAM,aAAN,MAAM,YAAW;AAAA;AAAA;AAAA;AAAA,EAItB;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA,EAEA;AAAA,EAEA,OAAO,cAAc,IAAI,eAAe;AAAA,EAExC,YAAY,KAAa,MAA2B;AAClD,SAAK,OAAO;AACZ,SAAK,SAAS,KAAK;AACnB,SAAK,qBAAqB,KAAK;AAC/B,SAAK,mBAAmB,KAAK;AAAA,EAC/B;AAAA,EAEA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS;AACP,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,uBAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK,IAAI,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,iBAAiB;AACf,QAAI,CAAC,KAAK,kBAAkB;AAC1B,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,mBAAmB,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,IAAI,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,OAAO,WAAW,KAAa,MAAc;AAC3C,WAAO,IAAI,YAAW,KAAK,KAAK,YAAY,YAAY,IAAI,CAAC;AAAA,EAC/D;AAAA,EAEA,sBAAsB,UAAkB;AACtC,SAAK,sBAAsB;AAC3B,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS;AACP,SAAK,qBAAqB,KAAK,IAAI,IAAI;AACvC,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,YAAY;AACV,WAAO,YAAW,YAAY,UAAU;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ,mBAAmB,KAAK;AAAA,MACxB,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAAA,EACH;AACF;","names":[]}