{"version":3,"sources":["../src/storageAdapter.ts"],"sourcesContent":["import { Duration } from \"./duration\";\n\n/**\n * Most basic interface for a storage implementation. This is designed to be\n * quite easily implemented by users to plug in any new underlying storage.\n */\nexport type StorageAdapter<T> = {\n  set: (key: string, value: T) => Promise<void> | void;\n  get: (key: string) => Promise<T | undefined> | T | undefined;\n  delete: (key: string) => Promise<void> | void;\n  clear: () => Promise<void> | void;\n};\n\n/** Most basic interface for stored object. */\nexport type StoredObject<T> = {\n  value: T;\n  storedMs: number;\n  expiryMs: number;\n};\n\n/**\n * Full interface for a storage implementation. Each method can be either sync\n * or async, and the interface works with either implementation scheme.\n *\n * Note: We are using `interface` instead of `type ... &` because typedoc\n * cannot handle the `&` syntax to merge types.\n */\nexport interface FullStorageAdapter<T> extends StorageAdapter<T> {\n  // Redefining `set()`, but with an optional expiration parameter.\n  set: (\n    key: string,\n    value: T,\n    expiryDeltaMs?: number | Duration,\n  ) => Promise<void> | void;\n\n  getStoredObject: (\n    key: string,\n  ) => Promise<StoredObject<T> | undefined> | StoredObject<T> | undefined;\n\n  forEach(\n    callback: (\n      key: string,\n      value: T,\n      expiryMs: number,\n      storedMs: number,\n    ) => void | Promise<void>,\n  ): Promise<void> | void;\n\n  size(): Promise<number> | number;\n\n  asMap<T>():\n    | Promise<Map<string, StoredObject<T>>>\n    | Map<string, StoredObject<T>>;\n\n  gc: () => Promise<void> | void;\n\n  gcNow: () => Promise<void> | void;\n}\n"],"mappings":"+WAAA,IAAAA,EAAA,kBAAAC,EAAAD","names":["storageAdapter_exports","__toCommonJS"]}