{"version":3,"sources":["jsdelivr-header.js","/npm/keyv@5.5.5/dist/index.js"],"names":[],"mappings":"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","file":"/npm/keyv@5.5.5/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/keyv@5.5.5/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// src/index.ts\nimport { defaultDeserialize, defaultSerialize } from \"@keyv/serialize\";\n\n// src/event-manager.ts\nvar EventManager = class {\n  _eventListeners;\n  _maxListeners;\n  constructor() {\n    this._eventListeners = /* @__PURE__ */ new Map();\n    this._maxListeners = 100;\n  }\n  maxListeners() {\n    return this._maxListeners;\n  }\n  // Add an event listener\n  addListener(event, listener) {\n    this.on(event, listener);\n  }\n  on(event, listener) {\n    if (!this._eventListeners.has(event)) {\n      this._eventListeners.set(event, []);\n    }\n    const listeners = this._eventListeners.get(event);\n    if (listeners) {\n      if (listeners.length >= this._maxListeners) {\n        console.warn(\n          `MaxListenersExceededWarning: Possible event memory leak detected. ${listeners.length + 1} ${event} listeners added. Use setMaxListeners() to increase limit.`\n        );\n      }\n      listeners.push(listener);\n    }\n    return this;\n  }\n  // Remove an event listener\n  removeListener(event, listener) {\n    this.off(event, listener);\n  }\n  off(event, listener) {\n    const listeners = this._eventListeners.get(event) ?? [];\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n      listeners.splice(index, 1);\n    }\n    if (listeners.length === 0) {\n      this._eventListeners.delete(event);\n    }\n  }\n  once(event, listener) {\n    const onceListener = (...arguments_) => {\n      listener(...arguments_);\n      this.off(event, onceListener);\n    };\n    this.on(event, onceListener);\n  }\n  // Emit an event\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  emit(event, ...arguments_) {\n    const listeners = this._eventListeners.get(event);\n    if (listeners && listeners.length > 0) {\n      for (const listener of listeners) {\n        listener(...arguments_);\n      }\n    }\n  }\n  // Get all listeners for a specific event\n  listeners(event) {\n    return this._eventListeners.get(event) ?? [];\n  }\n  // Remove all listeners for a specific event\n  removeAllListeners(event) {\n    if (event) {\n      this._eventListeners.delete(event);\n    } else {\n      this._eventListeners.clear();\n    }\n  }\n  // Set the maximum number of listeners for a single event\n  setMaxListeners(n) {\n    this._maxListeners = n;\n  }\n};\nvar event_manager_default = EventManager;\n\n// src/hooks-manager.ts\nvar HooksManager = class extends event_manager_default {\n  _hookHandlers;\n  constructor() {\n    super();\n    this._hookHandlers = /* @__PURE__ */ new Map();\n  }\n  // Adds a handler function for a specific event\n  addHandler(event, handler) {\n    const eventHandlers = this._hookHandlers.get(event);\n    if (eventHandlers) {\n      eventHandlers.push(handler);\n    } else {\n      this._hookHandlers.set(event, [handler]);\n    }\n  }\n  // Removes a specific handler function for a specific event\n  removeHandler(event, handler) {\n    const eventHandlers = this._hookHandlers.get(event);\n    if (eventHandlers) {\n      const index = eventHandlers.indexOf(handler);\n      if (index !== -1) {\n        eventHandlers.splice(index, 1);\n      }\n    }\n  }\n  // Triggers all handlers for a specific event with provided data\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  trigger(event, data) {\n    const eventHandlers = this._hookHandlers.get(event);\n    if (eventHandlers) {\n      for (const handler of eventHandlers) {\n        try {\n          handler(data);\n        } catch (error) {\n          this.emit(\n            \"error\",\n            new Error(\n              `Error in hook handler for event \"${event}\": ${error.message}`\n            )\n          );\n        }\n      }\n    }\n  }\n  // Provides read-only access to the current handlers\n  get handlers() {\n    return new Map(this._hookHandlers);\n  }\n};\nvar hooks_manager_default = HooksManager;\n\n// src/stats-manager.ts\nvar StatsManager = class extends event_manager_default {\n  enabled = true;\n  hits = 0;\n  misses = 0;\n  sets = 0;\n  deletes = 0;\n  errors = 0;\n  constructor(enabled) {\n    super();\n    if (enabled !== void 0) {\n      this.enabled = enabled;\n    }\n    this.reset();\n  }\n  hit() {\n    if (this.enabled) {\n      this.hits++;\n    }\n  }\n  miss() {\n    if (this.enabled) {\n      this.misses++;\n    }\n  }\n  set() {\n    if (this.enabled) {\n      this.sets++;\n    }\n  }\n  delete() {\n    if (this.enabled) {\n      this.deletes++;\n    }\n  }\n  hitsOrMisses(array) {\n    for (const item of array) {\n      if (item === void 0) {\n        this.miss();\n      } else {\n        this.hit();\n      }\n    }\n  }\n  reset() {\n    this.hits = 0;\n    this.misses = 0;\n    this.sets = 0;\n    this.deletes = 0;\n    this.errors = 0;\n  }\n};\nvar stats_manager_default = StatsManager;\n\n// src/index.ts\nvar KeyvHooks = /* @__PURE__ */ ((KeyvHooks2) => {\n  KeyvHooks2[\"PRE_SET\"] = \"preSet\";\n  KeyvHooks2[\"POST_SET\"] = \"postSet\";\n  KeyvHooks2[\"PRE_GET\"] = \"preGet\";\n  KeyvHooks2[\"POST_GET\"] = \"postGet\";\n  KeyvHooks2[\"PRE_GET_MANY\"] = \"preGetMany\";\n  KeyvHooks2[\"POST_GET_MANY\"] = \"postGetMany\";\n  KeyvHooks2[\"PRE_GET_RAW\"] = \"preGetRaw\";\n  KeyvHooks2[\"POST_GET_RAW\"] = \"postGetRaw\";\n  KeyvHooks2[\"PRE_GET_MANY_RAW\"] = \"preGetManyRaw\";\n  KeyvHooks2[\"POST_GET_MANY_RAW\"] = \"postGetManyRaw\";\n  KeyvHooks2[\"PRE_DELETE\"] = \"preDelete\";\n  KeyvHooks2[\"POST_DELETE\"] = \"postDelete\";\n  return KeyvHooks2;\n})(KeyvHooks || {});\nvar iterableAdapters = [\n  \"sqlite\",\n  \"postgres\",\n  \"mysql\",\n  \"mongo\",\n  \"redis\",\n  \"valkey\",\n  \"etcd\"\n];\nvar Keyv = class extends event_manager_default {\n  opts;\n  iterator;\n  hooks = new hooks_manager_default();\n  stats = new stats_manager_default(false);\n  /**\n   * Time to live in milliseconds\n   */\n  _ttl;\n  /**\n   * Namespace\n   */\n  _namespace;\n  /**\n   * Store\n   */\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  _store = /* @__PURE__ */ new Map();\n  _serialize = defaultSerialize;\n  _deserialize = defaultDeserialize;\n  _compression;\n  _useKeyPrefix = true;\n  _throwOnErrors = false;\n  /**\n   * Keyv Constructor\n   * @param {KeyvStoreAdapter | KeyvOptions} store\n   * @param {Omit<KeyvOptions, 'store'>} [options] if you provide the store you can then provide the Keyv Options\n   */\n  constructor(store, options) {\n    super();\n    options ??= {};\n    store ??= {};\n    this.opts = {\n      namespace: \"keyv\",\n      serialize: defaultSerialize,\n      deserialize: defaultDeserialize,\n      emitErrors: true,\n      // @ts-expect-error - Map is not a KeyvStoreAdapter\n      store: /* @__PURE__ */ new Map(),\n      ...options\n    };\n    if (store && store.get) {\n      this.opts.store = store;\n    } else {\n      this.opts = {\n        ...this.opts,\n        ...store\n      };\n    }\n    this._store = this.opts.store ?? /* @__PURE__ */ new Map();\n    this._compression = this.opts.compression;\n    this._serialize = this.opts.serialize;\n    this._deserialize = this.opts.deserialize;\n    if (this.opts.namespace) {\n      this._namespace = this.opts.namespace;\n    }\n    if (this._store) {\n      if (!this._isValidStorageAdapter(this._store)) {\n        throw new Error(\"Invalid storage adapter\");\n      }\n      if (typeof this._store.on === \"function\") {\n        this._store.on(\"error\", (error) => this.emit(\"error\", error));\n      }\n      this._store.namespace = this._namespace;\n      if (typeof this._store[Symbol.iterator] === \"function\" && this._store instanceof Map) {\n        this.iterator = this.generateIterator(\n          this._store\n        );\n      } else if (\"iterator\" in this._store && this._store.opts && this._checkIterableAdapter()) {\n        this.iterator = this.generateIterator(\n          // biome-ignore lint/style/noNonNullAssertion: need to fix\n          this._store.iterator.bind(this._store)\n        );\n      }\n    }\n    if (this.opts.stats) {\n      this.stats.enabled = this.opts.stats;\n    }\n    if (this.opts.ttl) {\n      this._ttl = this.opts.ttl;\n    }\n    if (this.opts.useKeyPrefix !== void 0) {\n      this._useKeyPrefix = this.opts.useKeyPrefix;\n    }\n    if (this.opts.throwOnErrors !== void 0) {\n      this._throwOnErrors = this.opts.throwOnErrors;\n    }\n  }\n  /**\n   * Get the current store\n   */\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  get store() {\n    return this._store;\n  }\n  /**\n   * Set the current store. This will also set the namespace, event error handler, and generate the iterator. If the store is not valid it will throw an error.\n   * @param {KeyvStoreAdapter | Map<any, any> | any} store the store to set\n   */\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  set store(store) {\n    if (this._isValidStorageAdapter(store)) {\n      this._store = store;\n      this.opts.store = store;\n      if (typeof store.on === \"function\") {\n        store.on(\"error\", (error) => this.emit(\"error\", error));\n      }\n      if (this._namespace) {\n        this._store.namespace = this._namespace;\n      }\n      if (typeof store[Symbol.iterator] === \"function\" && store instanceof Map) {\n        this.iterator = this.generateIterator(\n          store\n        );\n      } else if (\"iterator\" in store && store.opts && this._checkIterableAdapter()) {\n        this.iterator = this.generateIterator(store.iterator?.bind(store));\n      }\n    } else {\n      throw new Error(\"Invalid storage adapter\");\n    }\n  }\n  /**\n   * Get the current compression function\n   * @returns {CompressionAdapter} The current compression function\n   */\n  get compression() {\n    return this._compression;\n  }\n  /**\n   * Set the current compression function\n   * @param {CompressionAdapter} compress The compression function to set\n   */\n  set compression(compress) {\n    this._compression = compress;\n  }\n  /**\n   * Get the current namespace.\n   * @returns {string | undefined} The current namespace.\n   */\n  get namespace() {\n    return this._namespace;\n  }\n  /**\n   * Set the current namespace.\n   * @param {string | undefined} namespace The namespace to set.\n   */\n  set namespace(namespace) {\n    this._namespace = namespace;\n    this.opts.namespace = namespace;\n    this._store.namespace = namespace;\n    if (this.opts.store) {\n      this.opts.store.namespace = namespace;\n    }\n  }\n  /**\n   * Get the current TTL.\n   * @returns {number} The current TTL in milliseconds.\n   */\n  get ttl() {\n    return this._ttl;\n  }\n  /**\n   * Set the current TTL.\n   * @param {number} ttl The TTL to set in milliseconds.\n   */\n  set ttl(ttl) {\n    this.opts.ttl = ttl;\n    this._ttl = ttl;\n  }\n  /**\n   * Get the current serialize function.\n   * @returns {Serialize} The current serialize function.\n   */\n  get serialize() {\n    return this._serialize;\n  }\n  /**\n   * Set the current serialize function.\n   * @param {Serialize} serialize The serialize function to set.\n   */\n  set serialize(serialize) {\n    this.opts.serialize = serialize;\n    this._serialize = serialize;\n  }\n  /**\n   * Get the current deserialize function.\n   * @returns {Deserialize} The current deserialize function.\n   */\n  get deserialize() {\n    return this._deserialize;\n  }\n  /**\n   * Set the current deserialize function.\n   * @param {Deserialize} deserialize The deserialize function to set.\n   */\n  set deserialize(deserialize) {\n    this.opts.deserialize = deserialize;\n    this._deserialize = deserialize;\n  }\n  /**\n   * Get the current useKeyPrefix value. This will enable or disable key prefixing.\n   * @returns {boolean} The current useKeyPrefix value.\n   * @default true\n   */\n  get useKeyPrefix() {\n    return this._useKeyPrefix;\n  }\n  /**\n   * Set the current useKeyPrefix value. This will enable or disable key prefixing.\n   * @param {boolean} value The useKeyPrefix value to set.\n   */\n  set useKeyPrefix(value) {\n    this._useKeyPrefix = value;\n    this.opts.useKeyPrefix = value;\n  }\n  /**\n   * Get the current throwErrors value. This will enable or disable throwing errors on methods in addition to emitting them.\n   * @return {boolean} The current throwOnErrors value.\n   */\n  get throwOnErrors() {\n    return this._throwOnErrors;\n  }\n  /**\n   * Set the current throwOnErrors value. This will enable or disable throwing errors on methods in addition to emitting them.\n   * @param {boolean} value The throwOnErrors value to set.\n   */\n  set throwOnErrors(value) {\n    this._throwOnErrors = value;\n    this.opts.throwOnErrors = value;\n  }\n  generateIterator(iterator) {\n    const function_ = async function* () {\n      for await (const [key, raw] of typeof iterator === \"function\" ? iterator(this._store.namespace) : iterator) {\n        const data = await this.deserializeData(raw);\n        if (this._useKeyPrefix && this._store.namespace && !key.includes(this._store.namespace)) {\n          continue;\n        }\n        if (typeof data.expires === \"number\" && Date.now() > data.expires) {\n          this.delete(key);\n          continue;\n        }\n        yield [this._getKeyUnprefix(key), data.value];\n      }\n    };\n    return function_.bind(this);\n  }\n  _checkIterableAdapter() {\n    return iterableAdapters.includes(this._store.opts.dialect) || iterableAdapters.some(\n      (element) => this._store.opts.url.includes(element)\n    );\n  }\n  _getKeyPrefix(key) {\n    if (!this._useKeyPrefix) {\n      return key;\n    }\n    if (!this._namespace) {\n      return key;\n    }\n    return `${this._namespace}:${key}`;\n  }\n  _getKeyPrefixArray(keys) {\n    if (!this._useKeyPrefix) {\n      return keys;\n    }\n    if (!this._namespace) {\n      return keys;\n    }\n    return keys.map((key) => `${this._namespace}:${key}`);\n  }\n  _getKeyUnprefix(key) {\n    if (!this._useKeyPrefix) {\n      return key;\n    }\n    return key.split(\":\").splice(1).join(\":\");\n  }\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  _isValidStorageAdapter(store) {\n    return store instanceof Map || typeof store.get === \"function\" && typeof store.set === \"function\" && typeof store.delete === \"function\" && typeof store.clear === \"function\";\n  }\n  // eslint-disable-next-line @stylistic/max-len\n  async get(key, options) {\n    const { store } = this.opts;\n    const isArray = Array.isArray(key);\n    const keyPrefixed = isArray ? this._getKeyPrefixArray(key) : this._getKeyPrefix(key);\n    const isDataExpired = (data) => typeof data.expires === \"number\" && Date.now() > data.expires;\n    if (isArray) {\n      if (options?.raw === true) {\n        return this.getMany(key, { raw: true });\n      }\n      return this.getMany(key, { raw: false });\n    }\n    this.hooks.trigger(\"preGet\" /* PRE_GET */, { key: keyPrefixed });\n    let rawData;\n    try {\n      rawData = await store.get(keyPrefixed);\n    } catch (error) {\n      if (this.throwOnErrors) {\n        throw error;\n      }\n    }\n    const deserializedData = typeof rawData === \"string\" || this.opts.compression ? await this.deserializeData(rawData) : rawData;\n    if (deserializedData === void 0 || deserializedData === null) {\n      this.hooks.trigger(\"postGet\" /* POST_GET */, {\n        key: keyPrefixed,\n        value: void 0\n      });\n      this.stats.miss();\n      return void 0;\n    }\n    if (isDataExpired(deserializedData)) {\n      await this.delete(key);\n      this.hooks.trigger(\"postGet\" /* POST_GET */, {\n        key: keyPrefixed,\n        value: void 0\n      });\n      this.stats.miss();\n      return void 0;\n    }\n    this.hooks.trigger(\"postGet\" /* POST_GET */, {\n      key: keyPrefixed,\n      value: deserializedData\n    });\n    this.stats.hit();\n    return options?.raw ? deserializedData : deserializedData.value;\n  }\n  async getMany(keys, options) {\n    const { store } = this.opts;\n    const keyPrefixed = this._getKeyPrefixArray(keys);\n    const isDataExpired = (data) => typeof data.expires === \"number\" && Date.now() > data.expires;\n    this.hooks.trigger(\"preGetMany\" /* PRE_GET_MANY */, { keys: keyPrefixed });\n    if (store.getMany === void 0) {\n      const promises = keyPrefixed.map(async (key) => {\n        const rawData2 = await store.get(key);\n        const deserializedRow = typeof rawData2 === \"string\" || this.opts.compression ? await this.deserializeData(rawData2) : rawData2;\n        if (deserializedRow === void 0 || deserializedRow === null) {\n          return void 0;\n        }\n        if (isDataExpired(deserializedRow)) {\n          await this.delete(key);\n          return void 0;\n        }\n        return options?.raw ? deserializedRow : deserializedRow.value;\n      });\n      const deserializedRows = await Promise.allSettled(promises);\n      const result2 = deserializedRows.map(\n        // biome-ignore lint/suspicious/noExplicitAny: type format\n        (row) => row.value\n      );\n      this.hooks.trigger(\"postGetMany\" /* POST_GET_MANY */, result2);\n      if (result2.length > 0) {\n        this.stats.hit();\n      }\n      return result2;\n    }\n    const rawData = await store.getMany(keyPrefixed);\n    const result = [];\n    const expiredKeys = [];\n    for (const index in rawData) {\n      let row = rawData[index];\n      if (typeof row === \"string\") {\n        row = await this.deserializeData(row);\n      }\n      if (row === void 0 || row === null) {\n        result.push(void 0);\n        continue;\n      }\n      if (isDataExpired(row)) {\n        expiredKeys.push(keys[index]);\n        result.push(void 0);\n        continue;\n      }\n      const value = options?.raw ? row : row.value;\n      result.push(value);\n    }\n    if (expiredKeys.length > 0) {\n      await this.deleteMany(expiredKeys);\n    }\n    this.hooks.trigger(\"postGetMany\" /* POST_GET_MANY */, result);\n    if (result.length > 0) {\n      this.stats.hit();\n    }\n    return result;\n  }\n  /**\n   * Get the raw value of a key. This is the replacement for setting raw to true in the get() method.\n   * @param {string} key the key to get\n   * @returns {Promise<StoredDataRaw<Value> | undefined>} will return a StoredDataRaw<Value> or undefined if the key does not exist or is expired.\n   */\n  async getRaw(key) {\n    const { store } = this.opts;\n    const keyPrefixed = this._getKeyPrefix(key);\n    this.hooks.trigger(\"preGetRaw\" /* PRE_GET_RAW */, { key: keyPrefixed });\n    const rawData = await store.get(keyPrefixed);\n    if (rawData === void 0 || rawData === null) {\n      this.hooks.trigger(\"postGetRaw\" /* POST_GET_RAW */, {\n        key: keyPrefixed,\n        value: void 0\n      });\n      this.stats.miss();\n      return void 0;\n    }\n    const deserializedData = typeof rawData === \"string\" || this.opts.compression ? await this.deserializeData(rawData) : rawData;\n    if (deserializedData !== void 0 && deserializedData.expires !== void 0 && deserializedData.expires !== null && // biome-ignore lint/style/noNonNullAssertion: need to fix\n    deserializedData.expires < Date.now()) {\n      this.hooks.trigger(\"postGetRaw\" /* POST_GET_RAW */, {\n        key: keyPrefixed,\n        value: void 0\n      });\n      this.stats.miss();\n      await this.delete(key);\n      return void 0;\n    }\n    this.stats.hit();\n    this.hooks.trigger(\"postGetRaw\" /* POST_GET_RAW */, {\n      key: keyPrefixed,\n      value: deserializedData\n    });\n    return deserializedData;\n  }\n  /**\n   * Get the raw values of many keys. This is the replacement for setting raw to true in the getMany() method.\n   * @param {string[]} keys the keys to get\n   * @returns {Promise<Array<StoredDataRaw<Value>>>} will return an array of StoredDataRaw<Value> or undefined if the key does not exist or is expired.\n   */\n  async getManyRaw(keys) {\n    const { store } = this.opts;\n    const keyPrefixed = this._getKeyPrefixArray(keys);\n    if (keys.length === 0) {\n      const result2 = Array.from({ length: keys.length }).fill(\n        void 0\n      );\n      this.stats.misses += keys.length;\n      this.hooks.trigger(\"postGetManyRaw\" /* POST_GET_MANY_RAW */, {\n        keys: keyPrefixed,\n        values: result2\n      });\n      return result2;\n    }\n    let result = [];\n    if (store.getMany === void 0) {\n      const promises = keyPrefixed.map(async (key) => {\n        const rawData = await store.get(key);\n        if (rawData !== void 0 && rawData !== null) {\n          return this.deserializeData(rawData);\n        }\n        return void 0;\n      });\n      const deserializedRows = await Promise.allSettled(promises);\n      result = deserializedRows.map(\n        // biome-ignore lint/suspicious/noExplicitAny: type format\n        (row) => row.value\n      );\n    } else {\n      const rawData = await store.getMany(keyPrefixed);\n      for (const row of rawData) {\n        if (row !== void 0 && row !== null) {\n          result.push(await this.deserializeData(row));\n        } else {\n          result.push(void 0);\n        }\n      }\n    }\n    const expiredKeys = [];\n    const isDataExpired = (data) => typeof data.expires === \"number\" && Date.now() > data.expires;\n    for (const [index, row] of result.entries()) {\n      if (row !== void 0 && isDataExpired(row)) {\n        expiredKeys.push(keyPrefixed[index]);\n        result[index] = void 0;\n      }\n    }\n    if (expiredKeys.length > 0) {\n      await this.deleteMany(expiredKeys);\n    }\n    this.stats.hitsOrMisses(result);\n    this.hooks.trigger(\"postGetManyRaw\" /* POST_GET_MANY_RAW */, {\n      keys: keyPrefixed,\n      values: result\n    });\n    return result;\n  }\n  /**\n   * Set an item to the store\n   * @param {string | Array<KeyvEntry>} key the key to use. If you pass in an array of KeyvEntry it will set many items\n   * @param {Value} value the value of the key\n   * @param {number} [ttl] time to live in milliseconds\n   * @returns {boolean} if it sets then it will return a true. On failure will return false.\n   */\n  async set(key, value, ttl) {\n    const data = { key, value, ttl };\n    this.hooks.trigger(\"preSet\" /* PRE_SET */, data);\n    const keyPrefixed = this._getKeyPrefix(data.key);\n    data.ttl ??= this._ttl;\n    if (data.ttl === 0) {\n      data.ttl = void 0;\n    }\n    const { store } = this.opts;\n    const expires = typeof data.ttl === \"number\" ? Date.now() + data.ttl : void 0;\n    if (typeof data.value === \"symbol\") {\n      this.emit(\"error\", \"symbol cannot be serialized\");\n      throw new Error(\"symbol cannot be serialized\");\n    }\n    const formattedValue = { value: data.value, expires };\n    const serializedValue = await this.serializeData(formattedValue);\n    let result = true;\n    try {\n      const value2 = await store.set(keyPrefixed, serializedValue, data.ttl);\n      if (typeof value2 === \"boolean\") {\n        result = value2;\n      }\n    } catch (error) {\n      result = false;\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n    }\n    this.hooks.trigger(\"postSet\" /* POST_SET */, {\n      key: keyPrefixed,\n      value: serializedValue,\n      ttl\n    });\n    this.stats.set();\n    return result;\n  }\n  /**\n   * Set many items to the store\n   * @param {Array<KeyvEntry>} entries the entries to set\n   * @returns {boolean[]} will return an array of booleans if it sets then it will return a true. On failure will return false.\n   */\n  // biome-ignore lint/correctness/noUnusedVariables: type format\n  async setMany(entries) {\n    let results = [];\n    try {\n      if (this._store.setMany === void 0) {\n        const promises = [];\n        for (const entry of entries) {\n          promises.push(this.set(entry.key, entry.value, entry.ttl));\n        }\n        const promiseResults = await Promise.all(promises);\n        results = promiseResults;\n      } else {\n        const serializedEntries = await Promise.all(\n          entries.map(async ({ key, value, ttl }) => {\n            ttl ??= this._ttl;\n            if (ttl === 0) {\n              ttl = void 0;\n            }\n            const expires = typeof ttl === \"number\" ? Date.now() + ttl : void 0;\n            if (typeof value === \"symbol\") {\n              this.emit(\"error\", \"symbol cannot be serialized\");\n              throw new Error(\"symbol cannot be serialized\");\n            }\n            const formattedValue = { value, expires };\n            const serializedValue = await this.serializeData(formattedValue);\n            const keyPrefixed = this._getKeyPrefix(key);\n            return { key: keyPrefixed, value: serializedValue, ttl };\n          })\n        );\n        results = await this._store.setMany(serializedEntries);\n      }\n    } catch (error) {\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n      results = entries.map(() => false);\n    }\n    return results;\n  }\n  /**\n   * Delete an Entry\n   * @param {string | string[]} key the key to be deleted. if an array it will delete many items\n   * @returns {boolean} will return true if item or items are deleted. false if there is an error\n   */\n  async delete(key) {\n    const { store } = this.opts;\n    if (Array.isArray(key)) {\n      return this.deleteMany(key);\n    }\n    const keyPrefixed = this._getKeyPrefix(key);\n    this.hooks.trigger(\"preDelete\" /* PRE_DELETE */, { key: keyPrefixed });\n    let result = true;\n    try {\n      const value = await store.delete(keyPrefixed);\n      if (typeof value === \"boolean\") {\n        result = value;\n      }\n    } catch (error) {\n      result = false;\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n    }\n    this.hooks.trigger(\"postDelete\" /* POST_DELETE */, {\n      key: keyPrefixed,\n      value: result\n    });\n    this.stats.delete();\n    return result;\n  }\n  /**\n   * Delete many items from the store\n   * @param {string[]} keys the keys to be deleted\n   * @returns {boolean} will return true if item or items are deleted. false if there is an error\n   */\n  async deleteMany(keys) {\n    try {\n      const { store } = this.opts;\n      const keyPrefixed = this._getKeyPrefixArray(keys);\n      this.hooks.trigger(\"preDelete\" /* PRE_DELETE */, { key: keyPrefixed });\n      if (store.deleteMany !== void 0) {\n        return await store.deleteMany(keyPrefixed);\n      }\n      const promises = keyPrefixed.map(async (key) => store.delete(key));\n      const results = await Promise.all(promises);\n      const returnResult = results.every(Boolean);\n      this.hooks.trigger(\"postDelete\" /* POST_DELETE */, {\n        key: keyPrefixed,\n        value: returnResult\n      });\n      return returnResult;\n    } catch (error) {\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n      return false;\n    }\n  }\n  /**\n   * Clear the store\n   * @returns {void}\n   */\n  async clear() {\n    this.emit(\"clear\");\n    const { store } = this.opts;\n    try {\n      await store.clear();\n    } catch (error) {\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n    }\n  }\n  async has(key) {\n    if (Array.isArray(key)) {\n      return this.hasMany(key);\n    }\n    const keyPrefixed = this._getKeyPrefix(key);\n    const { store } = this.opts;\n    if (store.has !== void 0 && !(store instanceof Map)) {\n      return store.has(keyPrefixed);\n    }\n    let rawData;\n    try {\n      rawData = await store.get(keyPrefixed);\n    } catch (error) {\n      this.emit(\"error\", error);\n      if (this._throwOnErrors) {\n        throw error;\n      }\n      return false;\n    }\n    if (rawData) {\n      const data = await this.deserializeData(rawData);\n      if (data) {\n        if (data.expires === void 0 || data.expires === null) {\n          return true;\n        }\n        return data.expires > Date.now();\n      }\n    }\n    return false;\n  }\n  /**\n   * Check if many keys exist\n   * @param {string[]} keys the keys to check\n   * @returns {boolean[]} will return an array of booleans if the keys exist\n   */\n  async hasMany(keys) {\n    const keyPrefixed = this._getKeyPrefixArray(keys);\n    const { store } = this.opts;\n    if (store.hasMany !== void 0) {\n      return store.hasMany(keyPrefixed);\n    }\n    const results = [];\n    for (const key of keys) {\n      results.push(await this.has(key));\n    }\n    return results;\n  }\n  /**\n   * Will disconnect the store. This is only available if the store has a disconnect method\n   * @returns {Promise<void>}\n   */\n  async disconnect() {\n    const { store } = this.opts;\n    this.emit(\"disconnect\");\n    if (typeof store.disconnect === \"function\") {\n      return store.disconnect();\n    }\n  }\n  // biome-ignore lint/suspicious/noExplicitAny: type format\n  emit(event, ...arguments_) {\n    if (event === \"error\" && !this.opts.emitErrors) {\n      return;\n    }\n    super.emit(event, ...arguments_);\n  }\n  async serializeData(data) {\n    if (!this._serialize) {\n      return data;\n    }\n    if (this._compression?.compress) {\n      return this._serialize({\n        value: await this._compression.compress(data.value),\n        expires: data.expires\n      });\n    }\n    return this._serialize(data);\n  }\n  async deserializeData(data) {\n    if (!this._deserialize) {\n      return data;\n    }\n    if (this._compression?.decompress && typeof data === \"string\") {\n      const result = await this._deserialize(data);\n      return {\n        value: await this._compression.decompress(result?.value),\n        expires: result?.expires\n      };\n    }\n    if (typeof data === \"string\") {\n      return this._deserialize(data);\n    }\n    return void 0;\n  }\n};\nvar index_default = Keyv;\nexport {\n  Keyv,\n  KeyvHooks,\n  index_default as default\n};\n/* v8 ignore next -- @preserve */\n"]}