{"version":3,"file":"index.mjs","sources":["../src/header/headers.ts","../src/header/interpreter.ts","../src/header/extract.ts","../src/util/cache-predicate.ts","../src/interceptors/util.ts","../src/interceptors/request.ts","../src/util/update-cache.ts","../src/interceptors/response.ts","../src/storage/build.ts","../src/storage/memory.ts","../src/util/key-generator.ts","../src/cache/create.ts","../src/storage/web-api.ts"],"sourcesContent":["export const Header = {\n  /**\n   * ```txt\n   * If-Modified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since\n   */\n  IfModifiedSince: 'if-modified-since',\n\n  /**\n   * ```txt\n   * Last-Modified: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified\n   */\n  LastModified: 'last-modified',\n\n  /**\n   * ```txt\n   * If-None-Match: \"<etag_value>\"\n   * If-None-Match: \"<etag_value>\", \"<etag_value>\", …\n   * If-None-Match: *\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match\n   */\n  IfNoneMatch: 'if-none-match',\n\n  /**\n   * ```txt\n   * Cache-Control: max-age=604800\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control\n   */\n  CacheControl: 'cache-control',\n\n  /**\n   * ```txt\n   * Pragma: no - cache;\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma\n   */\n  Pragma: 'pragma',\n\n  /**\n   * ```txt\n   * ETag: W / '<etag_value>';\n   * ETag: '<etag_value>';\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag\n   */\n  ETag: 'etag',\n\n  /**\n   * ```txt\n   * Expires: <http-date>\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires\n   */\n  Expires: 'expires',\n\n  /**\n   * ```txt\n   * Age: <delta-seconds>\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age\n   */\n  Age: 'age',\n\n  /**\n   * Used internally as metadata to mark the cache item as revalidatable and enabling\n   * stale cache state Contains a string of ASCII characters that can be used as ETag for\n   * `If-Match` header Provided by user using `cache.etag` value.\n   *\n   * ```txt\n   * X-Axios-Cache-Etag: \"<etag_value>\"\n   * ```\n   */\n  XAxiosCacheEtag: 'x-axios-cache-etag',\n\n  /**\n   * Used internally as metadata to mark the cache item as revalidatable and enabling\n   * stale cache state may contain `'use-cache-timestamp'` if `cache.modifiedSince` is\n   * `true`, otherwise will contain a date from `cache.modifiedSince`. If a date is\n   * provided, it can be used for `If-Modified-Since` header, otherwise the cache\n   * timestamp can be used for `If-Modified-Since` header.\n   *\n   * ```txt\n   * X-Axios-Cache-Last-Modified: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT\n   * X-Axios-Cache-Last-Modified: use-cache-timestamp\n   * ```\n   */\n  XAxiosCacheLastModified: 'x-axios-cache-last-modified',\n\n  /**\n   * Used internally as metadata to mark the cache item able to be used if the server\n   * returns an error. The stale-if-error response directive indicates that the cache can\n   * reuse a stale response when any error occurs.\n   *\n   * ```txt\n   * XAxiosCacheStaleIfError: <seconds>\n   * ```\n   */\n  XAxiosCacheStaleIfError: 'x-axios-cache-stale-if-error',\n\n  /**\n   * Indicates which request headers affect the response content.\n   * Used to prevent cache poisoning when responses differ based on request headers.\n   *\n   * ```txt\n   * Vary: Authorization\n   * Vary: Authorization, Accept-Language\n   * Vary: *\n   * ```\n   *\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary\n   */\n  Vary: 'vary'\n} as const;\n","import { parse } from 'cache-parser';\nimport { Header } from './headers.js';\nimport type { HeaderInterpreter } from './types.js';\n\nexport const defaultHeaderInterpreter: HeaderInterpreter = (headers, location) => {\n  if (!headers) return 'not enough headers';\n\n  const cacheControl: unknown = headers[Header.CacheControl];\n\n  if (cacheControl) {\n    const cc = parse(String(cacheControl));\n\n    if (\n      // Header told that this response should not be cached.\n      cc.noCache ||\n      cc.noStore ||\n      // Server side handling private data\n      (location === 'server' && cc.private)\n    ) {\n      return 'dont cache';\n    }\n\n    if (cc.immutable) {\n      // 1 year is sufficient, as Infinity may cause problems with certain storages.\n      // It might not be the best way, but a year is better than none. Facebook shows\n      // that a browser session stays at the most 1 month.\n      return {\n        cache: 1000 * 60 * 60 * 24 * 365\n      };\n    }\n\n    if (cc.maxAge !== undefined) {\n      const age: unknown = headers[Header.Age];\n\n      return {\n        cache: age\n          ? // If age is present, we must subtract it from maxAge\n            (cc.maxAge - Number(age)) * 1000\n          : cc.maxAge * 1000,\n        // Already out of date, must be requested again\n        stale:\n          // I couldn't find any documentation about who should be used, as they\n          // are not meant to overlap each other. But, as we cannot request in the\n          // background, as the stale-while-revalidate says, and we just increase\n          // its staleTtl when its present, max-stale is being preferred over\n          // stale-while-revalidate.\n          cc.maxStale !== undefined\n            ? cc.maxStale * 1000\n            : cc.staleWhileRevalidate !== undefined\n              ? cc.staleWhileRevalidate * 1000\n              : undefined\n      };\n    }\n  }\n\n  const expires: unknown = headers[Header.Expires];\n\n  if (expires) {\n    const milliseconds = Date.parse(String(expires)) - Date.now();\n    return milliseconds >= 0 ? { cache: milliseconds } : 'dont cache';\n  }\n\n  return 'not enough headers';\n};\n","import type { AxiosRequestHeaders, AxiosResponseHeaders } from 'axios';\n\n/**\n * Extracts specified header values from request headers.\n * Generic utility for extracting a subset of headers.\n *\n * @param requestHeaders The full request headers object\n * @param headerNames Array of header names to extract\n * @returns Object with extracted header values\n */\nexport function extractHeaders(\n  requestHeaders: AxiosRequestHeaders | AxiosResponseHeaders,\n  headerNames: string[]\n): Record<string, string | undefined> {\n  const result: Record<string, string | undefined> = {};\n\n  for (const name of headerNames) {\n    result[name] = requestHeaders.get(name)?.toString();\n  }\n\n  return result;\n}\n","import type { CacheAxiosResponse } from '../cache/axios.js';\n\nimport type { CachePredicate, CachePredicateObject } from './types.js';\n\n/** Tests an response against a {@link CachePredicateObject}. */\nexport async function testCachePredicate<R = unknown, D = unknown>(\n  response: CacheAxiosResponse<R, D>,\n  predicate: CachePredicate<R, D>\n): Promise<boolean> {\n  if (typeof predicate === 'function') {\n    return predicate(response);\n  }\n\n  const { statusCheck, responseMatch, containsHeaders } = predicate;\n\n  if (\n    (statusCheck && !(await statusCheck(response.status))) ||\n    (responseMatch && !(await responseMatch(response)))\n  ) {\n    return false;\n  }\n\n  if (containsHeaders) {\n    for (const [header, predicate] of Object.entries(containsHeaders)) {\n      if (\n        !(await predicate(\n          // Avoid bugs in case the header is not in lower case\n          response.headers[header.toLowerCase()] ?? response.headers[header]\n        ))\n      ) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * Determines whether a given URL matches a specified pattern, which can be either a\n * string or a regular expression.\n *\n * @param matchPattern - The pattern to match against\n *\n *   - If it's a regular expression, it will be reset to ensure consistent behavior for\n *       stateful regular expressions.\n *   - If it's a string, the function checks if the URL contains the string.\n *\n * @param configUrl - The URL to test against the provided pattern; normally `config.url`.\n * @returns `true` if the `configUrl` matches the `matchPattern`\n */\nexport function regexOrStringMatch(matchPattern: string | RegExp, configUrl: string) {\n  if (matchPattern instanceof RegExp) {\n    matchPattern.lastIndex = 0; // Reset the regex to ensure consistent matching\n    return matchPattern.test(configUrl);\n  }\n\n  return configUrl.includes(matchPattern);\n}\n","import type { Method } from 'axios';\nimport type {\n  CacheAxiosResponse,\n  CacheRequestConfig,\n  InternalCacheRequestConfig\n} from '../cache/axios.js';\nimport type { CacheProperties } from '../cache/cache.js';\nimport { Header } from '../header/headers.js';\nimport type {\n  CachedResponse,\n  MustRevalidateStorageValue,\n  StaleStorageValue\n} from '../storage/types.js';\n\n/**\n * Creates a new validateStatus function that will use the one already used and also\n * accept status code 304.\n */\nexport function createValidateStatus(\n  oldValidate?: CacheRequestConfig['validateStatus']\n): (status: number) => boolean {\n  return oldValidate\n    ? (status) => oldValidate(status) || status === 304\n    : (status) => (status >= 200 && status < 300) || status === 304;\n}\n\n/** Checks if the given method is in the methods array */\nexport function isMethodIn(\n  requestMethod: Method | string = 'get',\n  methodList: Method[] = []\n): boolean {\n  requestMethod = requestMethod.toLowerCase() as Lowercase<Method>;\n  return methodList.some((method) => method === requestMethod);\n}\n\nexport interface ConfigWithCache<D> extends InternalCacheRequestConfig<unknown, D> {\n  cache: Partial<CacheProperties<unknown, D>>;\n}\n\n/**\n * This function updates the cache when the request is stale. So, the next request to the\n * server will be made with proper header / settings.\n */\nexport function updateStaleRequest<D>(\n  cache: StaleStorageValue | MustRevalidateStorageValue,\n  config: ConfigWithCache<D>\n): void {\n  const { etag, modifiedSince } = config.cache;\n\n  if (etag) {\n    const etagValue = etag === true ? cache.data?.headers[Header.ETag] : etag;\n\n    if (etagValue) {\n      config.headers.set(Header.IfNoneMatch, etagValue);\n    }\n  }\n\n  if (modifiedSince) {\n    config.headers.set(\n      Header.IfModifiedSince,\n      // If last-modified is not present, use the createdAt timestamp\n      modifiedSince === true\n        ? cache.data.headers[Header.LastModified] || new Date(cache.createdAt).toUTCString()\n        : modifiedSince.toUTCString()\n    );\n  }\n}\n\n/**\n * Creates the new date to the cache by the provided response. Also handles possible 304\n * Not Modified by updating response properties.\n */\nexport function createCacheResponse<R, D>(\n  response: CacheAxiosResponse<R, D>,\n  previousCache?: CachedResponse\n): CachedResponse {\n  if (response.status === 304 && previousCache) {\n    // Set the cache information into the response object\n    response.cached = true;\n    response.data = previousCache.data as R;\n    response.status = previousCache.status;\n    response.statusText = previousCache.statusText;\n\n    // Update possible new headers\n    response.headers = {\n      ...previousCache.headers,\n      ...response.headers\n    };\n\n    // return the old cache\n    return previousCache;\n  }\n\n  // New Response\n  return {\n    data: response.data,\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers\n  };\n}\n","import { deferred } from 'fast-defer';\nimport { compare as compareVary, parse as parseVary } from 'http-vary';\nimport type { AxiosCacheInstance, CacheAxiosResponse } from '../cache/axios.js';\nimport { extractHeaders } from '../header/extract.js';\nimport { Header } from '../header/headers.js';\nimport type { CachedResponse, LoadingStorageValue } from '../storage/types.js';\nimport { regexOrStringMatch } from '../util/cache-predicate.js';\nimport type { RequestInterceptor } from './build.js';\nimport { createValidateStatus, isMethodIn, updateStaleRequest } from './util.js';\n\nexport function defaultRequestInterceptor(axios: AxiosCacheInstance): RequestInterceptor {\n  const onFulfilled: RequestInterceptor['onFulfilled'] = async (config) => {\n    config.id = axios.generateKey(config, {\n      vary:\n        config.cache && Array.isArray(config.cache.vary)\n          ? extractHeaders(config.headers, config.cache.vary)\n          : undefined\n    });\n\n    if (config.cache === false) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: config.id,\n          msg: 'Cache disabled: config.cache === false'\n        });\n      }\n\n      return config;\n    }\n\n    // merge defaults with per request configuration\n    config.cache = { ...axios.defaults.cache, ...config.cache };\n\n    // Check if cache is disabled via enabled flag\n    if (config.cache.enabled === false) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: config.id,\n          msg: 'Cache disabled: config.cache.enabled === false'\n        });\n      }\n\n      return config;\n    }\n\n    // ignoreUrls (blacklist)\n    if (\n      typeof config.cache.cachePredicate === 'object' &&\n      config.cache.cachePredicate.ignoreUrls &&\n      config.url\n    ) {\n      for (const url of config.cache.cachePredicate.ignoreUrls) {\n        if (regexOrStringMatch(url, config.url)) {\n          if (__ACI_DEV__) {\n            axios.debug({\n              id: config.id,\n              msg: `URL ignored: matches ignoreUrls pattern`,\n              data: { url: config.url, pattern: url }\n            });\n          }\n\n          return config;\n        }\n      }\n    }\n\n    // allowUrls\n    if (\n      typeof config.cache.cachePredicate === 'object' &&\n      config.cache.cachePredicate.allowUrls &&\n      config.url\n    ) {\n      let matched = false;\n\n      for (const url of config.cache.cachePredicate.allowUrls) {\n        if (regexOrStringMatch(url, config.url)) {\n          matched = true;\n\n          if (__ACI_DEV__) {\n            axios.debug({\n              id: config.id,\n              msg: `URL allowed: matches allowUrls pattern`,\n              data: { url: config.url, pattern: url }\n            });\n          }\n          break;\n        }\n      }\n\n      if (!matched) {\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: config.id,\n            msg: `URL rejected: not in allowUrls`,\n            data: { url: config.url, allowUrls: config.cache.cachePredicate.allowUrls }\n          });\n        }\n        return config;\n      }\n    }\n\n    // Applies sufficient headers to prevent other cache systems to work along with this one\n    //\n    // Its currently used before isMethodIn because if the isMethodIn returns false, the request\n    // shouldn't be cached an therefore neither in the browser.\n    // https://stackoverflow.com/a/2068407\n    if (config.cache.cacheTakeover) {\n      config.headers.set(\n        Header.CacheControl,\n        'no-cache, no-store, must-revalidate, max-age=0',\n        false\n      );\n      config.headers.set(Header.Pragma, 'no-cache', false);\n      config.headers.set(Header.Expires, '0', false);\n    }\n\n    if (!isMethodIn(config.method, config.cache.methods)) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: config.id,\n          msg: `Method ${config.method} not cacheable (allowed: ${config.cache.methods})`\n        });\n      }\n\n      return config;\n    }\n\n    // Assumes that the storage handled staled responses\n    let cache = await axios.storage.get(config.id, config);\n    const overrideCache = config.cache.override;\n\n    // Checks for vary mismatches in cached responses before proceeding\n    // If a vary mismatch is detected, it will generate a new key based on the\n    // current request headers and re-fetch the cache.\n    if (\n      // Vary enabled\n      config.cache.vary !== false &&\n      // Had vary headers in cached response (cached or stale)\n      cache.data?.meta?.vary &&\n      // Previous response had Vary header to use\n      cache.data.headers[Header.Vary]\n    ) {\n      const vary = Array.isArray(config.cache.vary)\n        ? config.cache.vary\n        : parseVary(cache.data.headers[Header.Vary]);\n\n      // Compares current request headers with cached vary headers (meta.vary)\n      if (vary && vary !== '*' && !compareVary(vary, cache.data.meta?.vary, config.headers)) {\n        // Generate base key without id field (otherwise returns config.id)\n        const newKey = axios.generateKey(\n          { ...config, id: undefined },\n          { vary: extractHeaders(config.headers, vary) }\n        );\n\n        // If ends up being a new key, change the cache to the new one\n        if (config.id !== newKey) {\n          if (__ACI_DEV__) {\n            axios.debug({\n              id: config.id,\n              msg: 'Vary mismatch: switching to vary-aware key',\n              data: { oldKey: config.id, newKey }\n            });\n          }\n\n          config.id = newKey;\n          cache = await axios.storage.get(newKey, config);\n        }\n      }\n    }\n\n    // Not cached, continue the request, and mark it as fetching\n    // biome-ignore lint/suspicious/noConfusingLabels: required to break condition in simultaneous accesses\n    ignoreAndRequest: if (\n      cache.state === 'empty' ||\n      cache.state === 'stale' ||\n      cache.state === 'must-revalidate' ||\n      overrideCache\n    ) {\n      // This checks for simultaneous access to a new key. The js event loop jumps on the\n      // first await statement, so the second (asynchronous call) request may have already\n      // started executing.\n      if (axios.waiting.has(config.id) && !overrideCache) {\n        cache = await axios.storage.get(config.id, config);\n\n        // This check is required when a request has it own cache deleted manually, lets\n        // say by a `axios.storage.delete(key)` and has a concurrent loading request.\n        // Because in this case, the cache will be empty and may still has a pending key\n        // on waiting map.\n        if (cache.state !== 'empty' && cache.state !== 'must-revalidate') {\n          if (__ACI_DEV__) {\n            axios.debug({\n              id: config.id,\n              msg: 'Concurrent request found, reusing result'\n            });\n          }\n\n          break ignoreAndRequest;\n        }\n      }\n\n      // Create a deferred to resolve other requests for the same key when it's completed\n      const def = deferred<void>();\n      axios.waiting.set(config.id, def);\n\n      // Adds a default reject handler to catch when the request gets aborted without\n      // others waiting for it.\n      def.catch(() => undefined);\n\n      await axios.storage.set(\n        config.id,\n        {\n          state: 'loading',\n          previous: overrideCache\n            ? // Simply determine if the request is stale or not\n              // based if it had previous data or not\n              cache.data\n              ? 'stale'\n              : 'empty'\n            : // Typescript doesn't know that cache.state here can only be 'empty' or 'stale'\n              (cache.state as 'stale' | 'must-revalidate'),\n\n          data: cache.data as any,\n\n          // If the cache is empty and asked to override it, use the current timestamp\n          createdAt: overrideCache && !cache.createdAt ? Date.now() : (cache.createdAt as any)\n        },\n        config\n      );\n\n      // Skip adding conditional headers (If-None-Match, If-Modified-Since) when override is true.\n      // The override option is meant to bypass cache and get fresh data, not revalidate existing cache.\n      // Adding conditional headers would cause the server to return 304 Not Modified instead of fresh data.\n      if ((cache.state === 'stale' || cache.state === 'must-revalidate') && !overrideCache) {\n        updateStaleRequest(cache, { ...config, cache: config.cache });\n\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: config.id,\n            msg: 'Stale revalidation: added conditional headers (If-None-Match/If-Modified-Since)'\n          });\n        }\n      }\n\n      config.validateStatus = createValidateStatus(config.validateStatus);\n\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: config.id,\n          msg: 'Making network request',\n          data: { overrideCache, cacheState: cache.state }\n        });\n      }\n\n      // Hydrates any UI temporarily, if cache is available\n      if (cache.state === 'stale' || (cache.data && cache.state !== 'must-revalidate')) {\n        await config.cache.hydrate?.(cache);\n      }\n\n      return config;\n    }\n\n    let cachedResponse: CachedResponse;\n\n    if (cache.state === 'loading') {\n      const deferred = axios.waiting.get(config.id);\n\n      // The deferred may not exists when the process is using a persistent\n      // storage and cancelled  in the middle of a request, this would result in\n      // a pending loading state in the storage but no current promises to resolve\n      if (!deferred) {\n        // Hydrates any UI temporarily, if cache is available\n        if (cache.data) {\n          await config.cache.hydrate?.(cache);\n        }\n\n        return config;\n      }\n\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: config.id,\n          msg: 'Concurrent request detected, waiting...'\n        });\n      }\n\n      try {\n        // Deferred can't reuse the value because the user's storage might clone\n        // or mutate the value, so we need to ask it again.\n        // For example with memoryStorage + cloneData\n        await deferred;\n        const state = await axios.storage.get(config.id, config);\n\n        // This is a cache mismatch and should never happen, but in case it does,\n        // we need to redo the request all over again.\n        /* c8 ignore start */\n        if (!state.data) {\n          if (__ACI_DEV__) {\n            axios.debug({\n              id: config.id,\n              msg: 'Concurrent request completed without data, retrying'\n            });\n          }\n\n          return onFulfilled!(config);\n        }\n        /* c8 ignore end */\n\n        // After waiting, check if this request's vary headers match the cached variant\n        // If mismatch, don't use the cache - make own request to prevent cache poisoning\n        if (\n          config.cache.vary !== false &&\n          state.data.meta?.vary &&\n          state.data.headers[Header.Vary]\n        ) {\n          const vary = Array.isArray(config.cache.vary)\n            ? config.cache.vary\n            : parseVary(state.data.headers[Header.Vary]);\n\n          // Compare vary headers - if mismatch, make own request\n          if (vary && vary !== '*' && !compareVary(vary, state.data.meta.vary, config.headers)) {\n            if (__ACI_DEV__) {\n              axios.debug({\n                id: config.id,\n                msg: 'Vary mismatch after concurrent request, making own request',\n                data: {\n                  cachedVary: state.data.meta.vary,\n                  currentVary: extractHeaders(config.headers, vary)\n                }\n              });\n            }\n\n            // Don't use cached response - rerun interceptor logic but with new key\n            return onFulfilled!(config);\n          }\n        }\n\n        cachedResponse = state.data;\n      } catch (err) {\n        // The deferred was rejected by the first request that encountered an error.\n        // All deduplicated requests waiting on this deferred should fail with the same error\n        // to maintain consistency and prevent multiple network retries for the same resource.\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: config.id,\n            msg: 'Concurrent request failed, propagating error',\n            data: err\n          });\n        }\n\n        throw err;\n      }\n    } else {\n      cachedResponse = cache.data;\n    }\n\n    // The cached data is already transformed after receiving the response from the server.\n    // Reapplying the transformation on the transformed data will have an unintended effect.\n    // Since the cached data is already in the desired format, there is no need to apply the transformation function again.\n    config.transformResponse = undefined;\n\n    // Even though the response interceptor receives this one from here,\n    // it has been configured to ignore cached responses = true\n    config.adapter = function cachedAdapter(): Promise<CacheAxiosResponse> {\n      return Promise.resolve({\n        config,\n        data: cachedResponse.data,\n        headers: cachedResponse.headers,\n        status: cachedResponse.status,\n        statusText: cachedResponse.statusText,\n        cached: true,\n        stale: (cache as LoadingStorageValue).previous === 'stale',\n        id: config.id!\n      });\n    };\n\n    if (__ACI_DEV__) {\n      axios.debug({\n        id: config.id,\n        msg: 'Using cached response'\n      });\n    }\n\n    return config;\n  };\n\n  return {\n    onFulfilled\n  };\n}\n","import type { CacheAxiosResponse } from '../cache/axios.js';\nimport type { AxiosStorage } from '../storage/types.js';\nimport type { CacheUpdater } from './types.js';\n\n/** Function to update all caches, from CacheProperties.update, with the new data. */\nexport async function updateCache<R, D>(\n  storage: AxiosStorage,\n  data: CacheAxiosResponse<R, D>,\n  cacheUpdater: CacheUpdater<R, D>\n): Promise<void> {\n  // Global cache update function.\n  if (typeof cacheUpdater === 'function') {\n    return cacheUpdater(data);\n  }\n\n  for (const [cacheKey, updater] of Object.entries(cacheUpdater)) {\n    if (updater === 'delete') {\n      await storage.remove(cacheKey, data.config);\n      continue;\n    }\n\n    const value = await storage.get(cacheKey, data.config);\n\n    if (value.state === 'loading') {\n      continue;\n    }\n\n    const newValue = await updater(value, data);\n\n    if (newValue === 'delete') {\n      await storage.remove(cacheKey, data.config);\n      continue;\n    }\n\n    if (newValue !== 'ignore') {\n      await storage.set(cacheKey, newValue, data.config);\n    }\n  }\n}\n","import type { AxiosResponseHeaders } from 'axios';\nimport { parse } from 'cache-parser';\nimport { parse as parseVary } from 'http-vary';\nimport type { AxiosCacheInstance, CacheAxiosResponse, CacheRequestConfig } from '../cache/axios.js';\nimport type { CacheProperties } from '../cache/cache.js';\nimport { extractHeaders } from '../header/extract.js';\nimport { Header } from '../header/headers.js';\nimport type { CachedStorageValue } from '../storage/types.js';\nimport { testCachePredicate } from '../util/cache-predicate.js';\nimport { updateCache } from '../util/update-cache.js';\nimport type { ResponseInterceptor } from './build.js';\nimport { createCacheResponse, isMethodIn } from './util.js';\n\nexport function defaultResponseInterceptor(axios: AxiosCacheInstance): ResponseInterceptor {\n  /**\n   * Replies a deferred stored in the axios waiting map. Use resolve to proceed checking the\n   * previously updated cache or reject to abort deduplicated requests with error.\n   */\n  const replyDeferred = (responseId: string, mode: 'reject' | 'resolve', error?: any) => {\n    // Rejects the deferred, if present\n    const deferred = axios.waiting.get(responseId);\n\n    if (deferred) {\n      deferred[mode](error);\n      axios.waiting.delete(responseId);\n\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: responseId,\n          msg: `Found waiting deferred(s) and ${mode} them`\n        });\n      }\n    }\n  };\n\n  const onFulfilled: ResponseInterceptor['onFulfilled'] = async (response) => {\n    // When response.config is not present, the response is indeed a error.\n    if (!response?.config) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          msg: 'Unknown response received (not an Axios response)',\n          data: response\n        });\n      }\n\n      // Re-throws the error\n      throw response;\n    }\n\n    response.id = response.config.id!;\n    response.cached ??= false;\n\n    const config = response.config;\n    // Request interceptor merges defaults with per request configuration\n    const cacheConfig = config.cache as CacheProperties;\n\n    // Response is already cached\n    if (response.cached) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: response.id,\n          msg: 'Returned cached response'\n        });\n      }\n\n      return response;\n    }\n\n    // Skip cache: either false or weird behavior\n    // config.cache should always exists, at least from global config merge.\n    if (!cacheConfig) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: response.id,\n          msg: 'Response received without cache config',\n          data: response\n        });\n      }\n\n      response.cached = false;\n      return response;\n    }\n\n    // Update other entries before updating himself\n    if (cacheConfig.update) {\n      await updateCache(axios.storage, response, cacheConfig.update);\n    }\n\n    if (!isMethodIn(config.method, cacheConfig.methods)) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: response.id,\n          msg: `Method ${config.method} not cacheable (allowed: ${cacheConfig.methods})`\n        });\n      }\n\n      return response;\n    }\n\n    const cache = await axios.storage.get(response.id, config);\n\n    if (\n      // If the request interceptor had a problem or it wasn't cached\n      cache.state !== 'loading'\n    ) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: response.id,\n          msg: 'Response received but storage not in loading state',\n          data: { cacheState: cache.state }\n        });\n      }\n\n      // On limited storage scenarios, its possible the request was evicted while waiting\n      // for the response, in this case, state will be 'empty' again instead of loading.\n      // https://github.com/arthurfiorette/axios-cache-interceptor/issues/833\n      axios.waiting.delete(response.id);\n      return response;\n    }\n\n    // Config told that this response should not be cached.\n    if (\n      // For 'loading' values (previous: stale), this check already ran in the past.\n      !cache.data &&\n      !(await testCachePredicate(response, cacheConfig.cachePredicate))\n    ) {\n      replyDeferred(response.id, 'resolve');\n\n      if (__ACI_DEV__) {\n        axios.debug({\n          id: response.id,\n          msg: 'Cache predicate rejected this response'\n        });\n      }\n\n      return response;\n    }\n\n    // Avoid remnant headers from remote server to break implementation\n    for (const header of Object.keys(response.headers)) {\n      if (header.startsWith('x-axios-cache')) {\n        delete response.headers[header];\n      }\n    }\n\n    if (cacheConfig.etag && cacheConfig.etag !== true) {\n      response.headers[Header.XAxiosCacheEtag] = cacheConfig.etag;\n    }\n\n    if (cacheConfig.modifiedSince) {\n      response.headers[Header.XAxiosCacheLastModified] =\n        cacheConfig.modifiedSince === true\n          ? 'use-cache-timestamp'\n          : cacheConfig.modifiedSince.toUTCString();\n    }\n\n    let ttl = cacheConfig.ttl || -1; // always set from global config\n    let staleTtl: number | undefined;\n\n    if (cacheConfig.interpretHeader) {\n      const expirationTime = axios.headerInterpreter(response.headers, axios.location);\n\n      // Cache should not be used\n      if (expirationTime === 'dont cache') {\n        replyDeferred(response.id, 'resolve');\n\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: response.id,\n            msg: 'Cache-Control header indicates: do not cache'\n          });\n        }\n\n        return response;\n      }\n\n      if (expirationTime !== 'not enough headers') {\n        if (typeof expirationTime === 'number') {\n          ttl = expirationTime;\n        } else {\n          ttl = expirationTime.cache;\n          staleTtl = expirationTime.stale;\n        }\n      }\n    }\n\n    if (typeof ttl === 'function') {\n      ttl = await ttl(response);\n    }\n\n    const data = createCacheResponse(response, cache.data);\n\n    // Either stales response (Vary *) or sets request Vary headers into metadata\n    if (cacheConfig.vary !== false && response.headers[Header.Vary]) {\n      const vary = Array.isArray(cacheConfig.vary)\n        ? cacheConfig.vary\n        : parseVary(response.headers[Header.Vary]);\n\n      // For valid values, store the subset of request headers in the cache response\n      if (Array.isArray(vary)) {\n        data.meta ??= {};\n        data.meta.vary = extractHeaders(config.headers, vary);\n\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: response.id,\n            msg: 'Storing response with Vary metadata',\n            data: { vary, extracted: data.meta.vary }\n          });\n        }\n\n        // RFC States * must revalidate every time per RFC 9110.\n      } else if (vary === '*') {\n        if (__ACI_DEV__) {\n          axios.debug({\n            id: response.id,\n            msg: 'Vary: * detected, storing as stale'\n          });\n        }\n\n        // Marks cache as stale immediately\n        await axios.storage.set(\n          response.id,\n          {\n            state: 'stale',\n            createdAt: Date.now(),\n            data,\n            ttl\n          },\n          config\n        );\n\n        replyDeferred(response.id, 'resolve');\n        return response;\n      }\n    }\n\n    if (cacheConfig.staleIfError) {\n      response.headers[Header.XAxiosCacheStaleIfError] = String(ttl);\n    }\n\n    if (__ACI_DEV__) {\n      axios.debug({\n        id: response.id,\n        msg: 'Caching response',\n        data: { ttl, staleTtl, interpretHeader: cacheConfig.interpretHeader }\n      });\n    }\n\n    const newCache: CachedStorageValue = {\n      state: 'cached',\n      ttl,\n      staleTtl,\n      createdAt: Date.now(),\n      data\n    };\n\n    // Define this key as cache on the storage\n    await axios.storage.set(response.id, newCache, config);\n    replyDeferred(response.id, 'resolve');\n\n    if (__ACI_DEV__) {\n      axios.debug({\n        id: response.id,\n        msg: 'Response cached successfully',\n        data: { state: newCache.state, ttl: newCache.ttl }\n      });\n    }\n\n    // Return the response with cached as false, because it was not cached at all\n    return response;\n  };\n\n  const onRejected: ResponseInterceptor['onRejected'] = async (error) => {\n    // When response.config is not present, the response is indeed a error.\n    if (!error.isAxiosError || !error.config) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          msg: 'FATAL: Non-Axios error in response interceptor',\n          data: error\n        });\n      }\n\n      // We should probably re-request the response to avoid an infinite loading state here\n      // but, since this is an unknown error, we cannot figure out what request ID to use.\n      // And the only solution is to let the storage actively reject the current loading state.\n      throw error;\n    }\n\n    const config = error.config as CacheRequestConfig & { headers: AxiosResponseHeaders };\n    const id = config.id;\n    const cacheConfig = config.cache as CacheProperties;\n    const response = error.response as CacheAxiosResponse | undefined;\n\n    // config.cache should always exist, at least from global config merge.\n    if (!cacheConfig || !id) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          msg: 'Request failed without cache config',\n          data: { error }\n        });\n      }\n\n      throw error;\n    }\n\n    if (!isMethodIn(config.method, cacheConfig.methods)) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id,\n          msg: `Method ${config.method} not cacheable (allowed: ${cacheConfig.methods})`\n        });\n      }\n\n      // Rejects all other requests waiting for this response\n      await axios.storage.remove(id, config);\n      replyDeferred(id, 'reject', error);\n\n      throw error;\n    }\n\n    const cache = await axios.storage.get(id, config);\n\n    if (\n      // This will only not be loading if the interceptor broke\n      cache.state !== 'loading' ||\n      cache.previous !== 'stale'\n    ) {\n      if (__ACI_DEV__) {\n        axios.debug({\n          id,\n          msg: 'Request error with unexpected cache state',\n          data: {\n            cacheState: cache.state,\n            previous: cache.state === 'loading' ? cache.previous : undefined,\n            errorCode: error.code\n          }\n        });\n      }\n\n      // Do not clear cache if this request is cached, but the request was cancelled before returning the cached response\n      if (\n        error.code !== 'ERR_CANCELED' ||\n        (error.code === 'ERR_CANCELED' && cache.state !== 'cached')\n      ) {\n        await axios.storage.remove(id, config);\n      }\n\n      // Rejects all other requests waiting for this response\n      replyDeferred(id, 'reject', error);\n\n      throw error;\n    }\n\n    if (cacheConfig.staleIfError) {\n      const cacheControl = String(response?.headers[Header.CacheControl]);\n      const staleHeader = cacheControl && parse(cacheControl).staleIfError;\n\n      const staleIfError =\n        typeof cacheConfig.staleIfError === 'function'\n          ? await cacheConfig.staleIfError(response, cache, error)\n          : cacheConfig.staleIfError === true && staleHeader\n            ? staleHeader * 1000 //staleIfError is in seconds\n            : cacheConfig.staleIfError;\n\n      if (__ACI_DEV__) {\n        axios.debug({\n          id,\n          msg: 'staleIfError config found for failed request',\n          data: { staleIfError, createdAt: cache.createdAt }\n        });\n      }\n\n      if (\n        staleIfError === true ||\n        // staleIfError is the number of seconds that stale is allowed to be used\n        (typeof staleIfError === 'number' && cache.createdAt + staleIfError > Date.now())\n      ) {\n        // re-mark the cache as stale\n        await axios.storage.set(\n          id,\n          {\n            state: 'stale',\n            createdAt: Date.now(),\n            data: cache.data\n          },\n          config\n        );\n        // Resolve all other requests waiting for this response\n        const waiting = axios.waiting.get(id);\n\n        if (waiting) {\n          waiting.resolve();\n          axios.waiting.delete(id);\n\n          if (__ACI_DEV__) {\n            axios.debug({\n              id,\n              msg: 'Found waiting deferred(s) and resolved them'\n            });\n          }\n        }\n\n        if (__ACI_DEV__) {\n          axios.debug({\n            id,\n            msg: 'staleIfError: returning stale cache for failed request'\n          });\n        }\n\n        return {\n          cached: true,\n          stale: true,\n          config,\n          id,\n          data: cache.data.data,\n          headers: cache.data.headers,\n          status: cache.data.status,\n          statusText: cache.data.statusText\n        };\n      }\n    }\n\n    if (__ACI_DEV__) {\n      axios.debug({\n        id,\n        msg: 'Unhandled error, cleaning up',\n        data: { errorCode: error.code, errorMessage: error.message }\n      });\n    }\n\n    // Rejects all other requests waiting for this response\n    await axios.storage.remove(id, config);\n    replyDeferred(id, 'reject', error);\n\n    throw error;\n  };\n\n  return {\n    onFulfilled,\n    onRejected\n  };\n}\n","import type { CacheRequestConfig } from '../cache/axios.js';\nimport { Header } from '../header/headers.js';\nimport type { MaybePromise } from '../util/types.js';\nimport type { AxiosStorage, CachedStorageValue, StaleStorageValue, StorageValue } from './types.js';\n\n/** Returns true if the provided object was created from {@link buildStorage} function. */\nexport const isStorage = (obj: unknown): obj is AxiosStorage =>\n  !!obj && !!(obj as Record<string, boolean>)['is-storage'];\n\nfunction hasUniqueIdentifierHeader(value: CachedStorageValue | StaleStorageValue): boolean {\n  const headers = value.data.headers;\n\n  return (\n    Header.ETag in headers ||\n    Header.LastModified in headers ||\n    Header.XAxiosCacheEtag in headers ||\n    Header.XAxiosCacheLastModified in headers\n  );\n}\n\n/** Returns true if value must be revalidated */\nexport function mustRevalidate(value: CachedStorageValue | StaleStorageValue): boolean {\n  // Must revalidate is a special case and should not serve stale values\n  // We could use cache-control's parse function, but this is way faster and simpler\n  return String(value.data.headers[Header.CacheControl]).includes('must-revalidate');\n}\n\n/** Returns true if this has sufficient properties to stale instead of expire. */\nexport function canStale(value: CachedStorageValue): boolean {\n  if (hasUniqueIdentifierHeader(value)) {\n    return true;\n  }\n\n  return (\n    value.state === 'cached' &&\n    value.staleTtl !== undefined &&\n    // Only allow stale values after the ttl is already in the past and the staleTtl is in the future.\n    // In cases that just createdAt + ttl > Date.now(), isn't enough because the staleTtl could be <= 0.\n    // This logic only returns true when Date.now() is between the (createdAt + ttl) and (createdAt + ttl + staleTtl).\n    // Following the example below:\n    // |--createdAt--:--ttl--:---staleTtl--->\n    // [        past        ][now is in here]\n    Math.abs(Date.now() - (value.createdAt + value.ttl)) <= value.staleTtl\n  );\n}\n\n/**\n * Checks if the provided cache is expired. You should also check if the cache\n * {@link canStale} and {@link mayUseStale}\n */\nexport function isExpired(value: CachedStorageValue | StaleStorageValue): boolean {\n  return value.ttl !== undefined && value.createdAt + value.ttl <= Date.now();\n}\n\n/**\n * Defines which storage states are evicted first when cleaning up the storage.\n */\nconst StateEvictionOrder: Record<StorageValue['state'], number> = {\n  empty: 0,\n  'must-revalidate': 1,\n  stale: 2,\n  cached: 3,\n  // loading states usually don't have any data and are the most important ones\n  // to keep around\n  loading: 4\n};\n\n/**\n * Is a comparator function that sorts storage entries by their eviction priority\n * and, in the same group, by older first.\n */\nexport function storageEntriesSorter(\n  [, a]: [string, StorageValue],\n  [, b]: [string, StorageValue]\n): number {\n  const stateDiff = StateEvictionOrder[a.state] - StateEvictionOrder[b.state];\n  if (stateDiff !== 0) return stateDiff;\n  return (a.createdAt || 0) - (b.createdAt || 0);\n}\n\n/**\n * Returns true if the storage entry can be removed according to its state and the\n * provided maxStaleAge.\n */\nexport function canRemoveStorageEntry(value: StorageValue, maxStaleAge: number): boolean {\n  switch (value.state) {\n    case 'loading':\n      return false;\n\n    case 'empty':\n    case 'must-revalidate':\n      return true;\n\n    case 'cached':\n      return isExpired(value) && !canStale(value);\n\n    case 'stale':\n      if (maxStaleAge !== undefined && value.ttl !== undefined) {\n        return Date.now() > value.createdAt + value.ttl + maxStaleAge;\n      }\n      return false;\n  }\n}\n\nexport interface BuildStorage extends Omit<AxiosStorage, 'get'> {\n  /**\n   * Returns the value for the given key. This method does not have to make checks for\n   * cache invalidation or anything. It just returns what was previous saved, if present.\n   *\n   * @param key The key to look for\n   * @param currentRequest The current {@link CacheRequestConfig}, if any\n   * @see https://axios-cache-interceptor.js.org/guide/storages#buildstorage\n   */\n  find: (\n    key: string,\n    currentRequest?: CacheRequestConfig\n  ) => MaybePromise<StorageValue | undefined>;\n}\n\n/**\n * All integrated storages are wrappers around the `buildStorage` function. External\n * libraries use it and if you want to build your own, `buildStorage` is the way to go!\n *\n * The exported `buildStorage` function abstracts the storage interface and requires a\n * super simple object to build the storage.\n *\n * **Note**: You can only create custom storages with this function.\n *\n * @example\n *\n * ```js\n * const myStorage = buildStorage({\n *   find: () => {...},\n *   set: () => {...},\n *   remove: () => {...},\n *   clear: () => {...}\n * });\n *\n * const axios = setupCache(axios, { storage: myStorage });\n * ```\n *\n * @see https://axios-cache-interceptor.js.org/guide/storages#buildstorage\n */\nexport function buildStorage({ set, find, remove, clear }: BuildStorage): AxiosStorage {\n  return {\n    //@ts-expect-error - we don't want to expose this\n    'is-storage': 1,\n    set,\n    remove,\n    clear,\n    get: async (key, config) => {\n      let value = await find(key, config);\n\n      if (!value) {\n        return { state: 'empty' };\n      }\n\n      if (\n        value.state === 'empty' ||\n        value.state === 'loading' ||\n        value.state === 'must-revalidate'\n      ) {\n        return value;\n      }\n\n      // Handle cached values\n      if (value.state === 'cached') {\n        if (!isExpired(value)) {\n          return value;\n        }\n\n        // Tries to stale expired value\n        if (!canStale(value)) {\n          await remove(key, config);\n          return { state: 'empty' };\n        }\n\n        value = {\n          state: 'stale',\n          createdAt: value.createdAt,\n          data: value.data,\n          ttl: value.staleTtl !== undefined ? value.staleTtl + value.ttl : undefined\n        };\n\n        await set(key, value, config);\n\n        // Must revalidate is a special case and should not serve stale values\n        if (mustRevalidate(value)) {\n          return { ...value, state: 'must-revalidate' };\n        }\n      }\n\n      // A second check in case the new stale value was created already expired.\n      if (!isExpired(value)) {\n        return value;\n      }\n\n      if (hasUniqueIdentifierHeader(value)) {\n        return value;\n      }\n\n      await remove(key, config);\n      return { state: 'empty' };\n    }\n  };\n}\n","import { buildStorage, canRemoveStorageEntry, storageEntriesSorter } from './build.js';\nimport type { AxiosStorage, StorageValue } from './types.js';\n\n/* c8 ignore start */\n/**\n * Clones an object using the structured clone algorithm if available, otherwise it uses\n * JSON.parse(JSON.stringify(value)).\n */\nconst clone: <T>(value: T) => T =\n  // https://caniuse.com/mdn-api_structuredclone (10/18/2023 92.51%)\n  typeof structuredClone === 'function'\n    ? structuredClone\n    : (value) => JSON.parse(JSON.stringify(value));\n/* c8 ignore stop */\n\n/**\n * Creates a simple in-memory storage. This means that if you need to persist data between\n * page or server reloads, this will not help.\n *\n * This is the storage used by default.\n *\n * If you need to modify it's data, you can do by the `data` property.\n *\n * @example\n *\n * ```js\n * const memoryStorage = buildMemoryStorage();\n *\n * setupCache(axios, { storage: memoryStorage });\n *\n * // Simple example to force delete the request cache\n *\n * const { id } = axios.get('url');\n *\n * delete memoryStorage.data[id];\n * ```\n *\n * @param {boolean | 'double'} cloneData Use `true` if the data returned by `find()`\n *   should be cloned to avoid mutating the original data outside the `set()` method. Use\n *   `'double'` to also clone before saving value in storage using `set()`. Disabled is\n *   default\n * @param {number | false} cleanupInterval The interval in milliseconds to run a\n *   setInterval job of cleaning old entries. If false, the job will not be created.\n *   5 minutes (300_000) is default\n * @param {number | false} maxEntries The maximum number of entries to keep in the\n *   storage. Its hard to determine the size of the entries, so a smart FIFO order is used\n *   to determine eviction. If false, no check will be done and you may grow up memory\n *   usage. 1024 is default\n * @param {number} maxStaleAge The maximum age in milliseconds a stale entry can stay\n *   in the storage before being removed. Otherwise, stale-able entries would stay\n *   indefinitely causing a memory leak eventually. 1 hour (3_600_000) is default\n */\nexport function buildMemoryStorage(\n  cloneData: boolean | 'double' = false,\n  cleanupInterval: number | false = 5 * 60 * 1000,\n  maxEntries: number | false = 1024,\n  maxStaleAge: number = 60 * 60 * 1000\n) {\n  function sortedEntries() {\n    return Array.from(storage.data.entries()).sort(storageEntriesSorter);\n  }\n\n  const storage = buildStorage({\n    set: (key, value) => {\n      // More entries than allowed, evict oldest ones\n      if (maxEntries && storage.data.size >= maxEntries) {\n        storage.cleanup();\n\n        // After cleanup, if still at or over capacity, manually evict entries\n        if (storage.data.size >= maxEntries) {\n          for (const [key] of sortedEntries()) {\n            storage.data.delete(key);\n\n            if (storage.data.size < maxEntries) {\n              break;\n            }\n          }\n        }\n      }\n\n      // Clone the value before storing to prevent future mutations\n      // from affecting cached data.\n      storage.data.set(key, cloneData === 'double' ? clone(value) : value);\n    },\n\n    remove: (key) => {\n      storage.data.delete(key);\n    },\n\n    find: (key) => {\n      const value = storage.data.get(key);\n      return cloneData && value !== undefined ? clone(value) : value;\n    },\n\n    clear: () => {\n      storage.data.clear();\n    }\n  }) as MemoryStorage;\n\n  storage.data = new Map();\n\n  // When this program gets running for more than the specified interval, there's a good\n  // chance of it being a long-running process or at least have a lot of entries. Therefore,\n  // \"faster\" loop is more important than code readability.\n  storage.cleanup = () => {\n    for (const [key, value] of sortedEntries()) {\n      if (canRemoveStorageEntry(value, maxStaleAge)) {\n        storage.data.delete(key);\n      }\n    }\n  };\n\n  if (cleanupInterval) {\n    storage.cleaner = setInterval(storage.cleanup, cleanupInterval);\n\n    // Attempt to unref the interval to not block Node.js from exiting\n    if (typeof storage.cleaner === 'object' && 'unref' in storage.cleaner) {\n      storage.cleaner.unref();\n    }\n  }\n\n  return storage;\n}\n\nexport interface MemoryStorage extends AxiosStorage {\n  data: Map<string, StorageValue>;\n  /** The job responsible to cleaning old entries */\n  cleaner: ReturnType<typeof setInterval>;\n  /** Tries to remove any invalid entry from the memory */\n  cleanup: () => void;\n}\n","import type { Method } from 'axios';\nimport { hash } from 'object-code';\nimport type { CacheRequestConfig } from '../cache/axios.js';\nimport type { CachedResponseMeta } from '../storage/types.js';\nimport type { KeyGenerator } from './types.js';\n\n// Remove first and last '/' char, if present\nconst SLASHES_REGEX = /^\\/|\\/$/g;\n\n/**\n * Builds an generator that receives a {@link CacheRequestConfig} and optional metadata,\n * and returns a value hashed by {@link hash}.\n *\n * The value is hashed into a signed integer when the returned value from the provided\n * generator is not a `string` or a `number`.\n *\n * You can return any type of data structure.\n *\n * @example\n *\n * ```js\n * // This generator will return a hash code.\n * // The code will only be the same if url, method and data are the same.\n * const generator = buildKeyGenerator(({ url, method, data }) => ({\n *   url,\n *   method,\n *   data\n * }));\n * ```\n */\nexport function buildKeyGenerator<R = unknown, D = unknown>(\n  generator: (request: CacheRequestConfig<R, D>, meta?: CachedResponseMeta) => unknown\n): KeyGenerator<R, D> {\n  return (request, meta) => {\n    if (request.id) {\n      return request.id;\n    }\n\n    const key = generator(request, meta);\n\n    if (typeof key === 'string' || typeof key === 'number') {\n      return `${key}`;\n    }\n\n    return `${hash(key)}`;\n  };\n}\n\nexport const defaultKeyGenerator = buildKeyGenerator(\n  ({ baseURL, url, method, params, data }, meta) => {\n    // Remove trailing slashes to avoid generating different keys for the \"same\" final url.\n    if (baseURL !== undefined) {\n      baseURL = baseURL.replace(SLASHES_REGEX, '');\n    } else {\n      // just to have a consistent hash\n      baseURL = '';\n    }\n\n    if (url !== undefined) {\n      url = url.replace(SLASHES_REGEX, '');\n    } else {\n      // just to have a consistent hash\n      url = '';\n    }\n\n    if (method !== undefined) {\n      method = method.toLowerCase() as Method;\n    } else {\n      // just to have a consistent hash\n      method = 'get';\n    }\n\n    return {\n      url: baseURL + (baseURL && url ? '/' : '') + url,\n      params,\n      method,\n      data,\n      ...meta\n    };\n  }\n);\n","import type { AxiosInstance } from 'axios';\nimport { defaultHeaderInterpreter } from '../header/interpreter.js';\nimport { defaultRequestInterceptor } from '../interceptors/request.js';\nimport { defaultResponseInterceptor } from '../interceptors/response.js';\nimport { isStorage } from '../storage/build.js';\nimport { buildMemoryStorage } from '../storage/memory.js';\nimport { defaultKeyGenerator } from '../util/key-generator.js';\nimport type { AxiosCacheInstance } from './axios.js';\nimport type { CacheInstance, CacheProperties } from './cache.js';\n\nexport interface CacheOptions extends Partial<CacheInstance>, Partial<CacheProperties> {}\n\n/**\n * Apply the caching interceptors for a already created axios instance.\n *\n * ```ts\n * const axios = setupCache(axios, OPTIONS);\n * ```\n *\n * The `setupCache` function receives global options and all [request\n * specifics](https://axios-cache-interceptor.js.org/config/request-specifics) ones too.\n * This way, you can customize the defaults for all requests.\n *\n * @param axios The already created axios instance\n * @param config The config for the caching interceptors\n * @returns The same instance with extended typescript types.\n * @see https://axios-cache-interceptor.js.org/config\n */\nexport function setupCache(axios: AxiosInstance, options: CacheOptions = {}): AxiosCacheInstance {\n  const axiosCache = axios as AxiosCacheInstance;\n\n  if (axiosCache.defaults.cache) {\n    throw new Error('setupCache() should be called only once');\n  }\n\n  axiosCache.location = typeof window === 'undefined' ? 'server' : 'client';\n\n  axiosCache.storage = options.storage || buildMemoryStorage();\n\n  if (!isStorage(axiosCache.storage)) {\n    throw new Error('Use buildStorage() function');\n  }\n\n  axiosCache.waiting = options.waiting || new Map();\n\n  axiosCache.generateKey = options.generateKey || defaultKeyGenerator;\n\n  axiosCache.headerInterpreter = options.headerInterpreter || defaultHeaderInterpreter;\n\n  axiosCache.requestInterceptor =\n    options.requestInterceptor || defaultRequestInterceptor(axiosCache);\n\n  axiosCache.responseInterceptor =\n    options.responseInterceptor || defaultResponseInterceptor(axiosCache);\n\n  axiosCache.debug = options.debug || function noop() {};\n\n  // CacheRequestConfig values\n  axiosCache.defaults.cache = {\n    enabled: options.enabled ?? true,\n\n    update: options.update || {},\n\n    ttl: options.ttl ?? 1000 * 60 * 5,\n\n    // Although RFC 7231 also marks POST as cacheable, most users don't know that\n    // and may have problems about why their \"create X\" route not working.\n    methods: options.methods || ['get', 'head'],\n\n    cachePredicate: options.cachePredicate || {\n      // All cacheable status codes defined in RFC 7231\n      statusCheck: (status) => [200, 203, 300, 301, 302, 404, 405, 410, 414, 501].includes(status)\n    },\n\n    etag: options.etag ?? true,\n\n    // This option is going to be ignored by servers when ETag is enabled\n    // Checks strict equality to false to avoid undefined-ish values\n    modifiedSince: options.modifiedSince ?? options.etag === false,\n\n    interpretHeader: options.interpretHeader ?? true,\n\n    cacheTakeover: options.cacheTakeover ?? true,\n\n    staleIfError: options.staleIfError ?? true,\n\n    override: options.override ?? false,\n\n    hydrate: options.hydrate ?? undefined,\n\n    vary: options.vary ?? true\n  };\n\n  // Apply interceptors\n  axiosCache.interceptors.request.use(\n    axiosCache.requestInterceptor.onFulfilled,\n    axiosCache.requestInterceptor.onRejected\n  );\n  axiosCache.interceptors.response.use(\n    axiosCache.responseInterceptor.onFulfilled,\n    axiosCache.responseInterceptor.onRejected\n  );\n\n  return axiosCache;\n}\n","import { Result } from 'try';\nimport { buildStorage, canRemoveStorageEntry } from './build.js';\nimport type { StorageValue } from './types.js';\n\n/**\n * Creates a simple storage. You can persist his data by using `sessionStorage` or\n * `localStorage` with it.\n *\n * **ImplNote**: Without polyfill, this storage only works on browser environments.\n *\n * @example\n *\n * ```js\n * const fromLocalStorage = buildWebStorage(localStorage);\n * const fromSessionStorage = buildWebStorage(sessionStorage);\n *\n * const myStorage = new Storage();\n * const fromMyStorage = buildWebStorage(myStorage);\n * ```\n *\n * @param storage The type of web storage to use. localStorage or sessionStorage.\n * @param prefix The prefix to index the storage. Useful to prevent collision between\n *   multiple places using the same storage.\n * @param {number} maxStaleAge The maximum age in milliseconds a stale entry can stay\n *   in the storage before being removed. Otherwise, stale-able entries would stay\n *   indefinitely causing a memory leak eventually. 1 hour (3_600_000) is default\n */\nexport function buildWebStorage(\n  storage: Storage,\n  prefix = 'axios-cache-',\n  maxStaleAge: number = 60 * 60 * 1000\n) {\n  function save(key: string, value: StorageValue) {\n    storage.setItem(prefix + key, JSON.stringify(value));\n  }\n\n  return buildStorage({\n    clear: () => {\n      for (const key in storage) {\n        if (key.startsWith(prefix)) {\n          storage.removeItem(key);\n        }\n      }\n    },\n\n    find: (key) => {\n      const json = storage.getItem(prefix + key);\n      return json ? (JSON.parse(json) as StorageValue) : undefined;\n    },\n\n    remove: (key) => {\n      storage.removeItem(prefix + key);\n    },\n\n    set: (key, value) => {\n      const result = Result.try(save, key, value);\n\n      if (result.ok) {\n        return;\n      }\n\n      // we cannot hide non quota errors\n      if (!isDomQuotaExceededError(result.error)) {\n        throw result.error;\n      }\n\n      const allValues: [string, StorageValue][] = Object.entries(storage as Record<string, string>)\n        .filter(([key]) => key.startsWith(prefix))\n        .map(([key, value]) => [key, JSON.parse(value) as StorageValue]);\n\n      // Remove all expired values\n      for (const [key, value] of allValues) {\n        if (canRemoveStorageEntry(value, maxStaleAge)) {\n          storage.removeItem(key);\n        }\n      }\n\n      // Try save again after removing expired values\n      const retry = Result.try(save, key, value);\n\n      if (retry.ok) {\n        return;\n      }\n\n      // we cannot hide non quota errors\n      if (!isDomQuotaExceededError(retry.error)) {\n        throw retry.error;\n      }\n\n      // Storage still full, try removing the oldest value until it can be saved\n\n      const descItems = allValues.sort((a, b) => (a[1].createdAt || 0) - (b[1].createdAt || 0));\n\n      // Keep looping until all items are removed or the save works\n      for (const item of descItems) {\n        storage.removeItem(item[0]);\n\n        const lastTry = Result.try(save, key, value);\n\n        if (lastTry.ok) {\n          return;\n        }\n\n        // we cannot hide non quota errors\n        if (!isDomQuotaExceededError(lastTry.error)) {\n          throw lastTry.error;\n        }\n      }\n\n      // Could not save even after removing all items, just ignore since its\n      // a storage quota issue.\n    }\n  });\n}\n\nfunction isDomQuotaExceededError(error: unknown): boolean {\n  // Check if it's a DOMException by duck-typing (works across different DOMException implementations)\n  const isDOMException =\n    error instanceof DOMException ||\n    (typeof error === 'object' &&\n      error !== null &&\n      'name' in error &&\n      error.constructor?.name === 'DOMException');\n\n  return (\n    isDOMException &&\n    // https://stackoverflow.com/a/23375082\n    'name' in (error as any) &&\n    ((error as any).name === 'QuotaExceededError' ||\n      (error as any).name === 'NS_ERROR_DOM_QUOTA_REACHED' ||\n      (error as any).name === 'QUOTA_EXCEEDED_ERR')\n  );\n}\n"],"names":["Header","IfModifiedSince","LastModified","IfNoneMatch","CacheControl","Pragma","ETag","Expires","Age","XAxiosCacheEtag","XAxiosCacheLastModified","XAxiosCacheStaleIfError","Vary","defaultHeaderInterpreter","headers","location","cacheControl","cc","parse","String","noCache","noStore","private","immutable","cache","maxAge","undefined","age","Number","stale","maxStale","staleWhileRevalidate","expires","milliseconds","Date","now","extractHeaders","requestHeaders","headerNames","result","name","_requestHeaders$get","get","toString","testCachePredicate","response","predicate","statusCheck","responseMatch","containsHeaders","status","header","Object","entries","_response$headers$hea","toLowerCase","regexOrStringMatch","matchPattern","configUrl","RegExp","lastIndex","test","includes","createValidateStatus","oldValidate","isMethodIn","requestMethod","methodList","some","method","updateStaleRequest","config","etag","modifiedSince","_cache$data","etagValue","data","set","createdAt","toUTCString","createCacheResponse","previousCache","cached","statusText","defaultRequestInterceptor","axios","onFulfilled","id","generateKey","vary","Array","isArray","defaults","enabled","cachePredicate","ignoreUrls","url","allowUrls","matched","cacheTakeover","methods","storage","overrideCache","override","meta","_cache$data$meta","parseVary","compareVary","newKey","ignoreAndRequest","state","waiting","has","def","deferred","catch","previous","validateStatus","hydrate","cachedResponse","_state$data$meta","err","transformResponse","adapter","cachedAdapter","Promise","resolve","updateCache","cacheUpdater","cacheKey","updater","remove","value","newValue","defaultResponseInterceptor","replyDeferred","responseId","mode","error","delete","_response$cached","cacheConfig","update","keys","startsWith","ttl","staleTtl","interpretHeader","expirationTime","headerInterpreter","_data$meta","staleIfError","newCache","onRejected","isAxiosError","code","staleHeader","isStorage","obj","hasUniqueIdentifierHeader","mustRevalidate","canStale","Math","abs","isExpired","StateEvictionOrder","empty","loading","storageEntriesSorter","a","b","stateDiff","canRemoveStorageEntry","maxStaleAge","buildStorage","find","clear","key","clone","structuredClone","JSON","stringify","buildMemoryStorage","cloneData","cleanupInterval","maxEntries","sortedEntries","from","sort","size","cleanup","Map","cleaner","setInterval","unref","SLASHES_REGEX","buildKeyGenerator","generator","request","hash","defaultKeyGenerator","baseURL","params","replace","setupCache","options","_options$enabled","_options$ttl","_options$etag","_options$modifiedSinc","_options$interpretHea","_options$cacheTakeove","_options$staleIfError","_options$override","_options$hydrate","_options$vary","axiosCache","Error","window","requestInterceptor","responseInterceptor","debug","noop","interceptors","use","buildWebStorage","prefix","save","setItem","removeItem","json","getItem","Result","try","ok","isDomQuotaExceededError","allValues","filter","map","retry","descItems","item","lastTry","_error$constructor","isDOMException","DOMException","constructor"],"mappings":"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"}