{"version":3,"file":"useCachePlugin.mjs","sources":["../../../../../../../package/hooks/useRequest/src/plugins/useCachePlugin.ts"],"sourcesContent":["import type { Plugin } from \"../types\";\nimport { setCache, getCache } from \"../../__utils__/cache\";\nimport type { CachedData } from \"../../__utils__/cache\";\nimport { setCachePromise, getCachePromise } from \"../../__utils__/cachePromise\";\nimport { trigger, subscribe } from \"../../__utils__/cacheSubscribe\";\nimport { onUnmounted, toValue } from \"vue\";\n\nconst useCachePlugin: Plugin<any, any[]> = (\n  fetchInstance,\n  {\n    cacheKey,\n    cacheTime = 5 * 60 * 1000,\n    staleTime = 0,\n    setCache: customSetCache,\n    getCache: customGetCache\n  }\n) => {\n  let unSubscribe: () => void;\n\n  let currentPromise: Promise<any>;\n\n  const _setCache = (key: string, cachedData: CachedData) => {\n    if (customSetCache) {\n      customSetCache(cachedData);\n    } else {\n      setCache(key, cacheTime, cachedData);\n    }\n    trigger(key, cachedData.data);\n  };\n\n  const _getCache = (key: string, params: any[] = []) => {\n    if (customGetCache) {\n      return customGetCache(params);\n    }\n    return getCache(key);\n  };\n\n  if (!cacheKey) {\n    return {};\n  }\n\n  // get data from cache when init\n  const cacheData = _getCache(cacheKey);\n  if (cacheData && Object.hasOwnProperty.call(cacheData, \"data\")) {\n    fetchInstance.data.value = toValue(cacheData.data);\n    fetchInstance.params.value = toValue(cacheData.params);\n    if (staleTime === -1 || new Date().getTime() - cacheData.time <= staleTime) {\n      fetchInstance.loading.value = false;\n    }\n  }\n\n  // subscribe same cachekey update, trigger update\n  unSubscribe = subscribe(cacheKey, (data) => {\n    fetchInstance.data.value = data;\n  });\n\n  onUnmounted(() => {\n    unSubscribe?.();\n  });\n\n  return {\n    onBefore: (params) => {\n      const cacheData = _getCache(cacheKey, params);\n\n      if (!cacheData || !Object.hasOwnProperty.call(cacheData, \"data\")) {\n        return {};\n      }\n\n      // If the data is fresh, stop request\n      if (staleTime === -1 || new Date().getTime() - cacheData.time <= staleTime) {\n        return {\n          loading: false,\n          data: cacheData?.data,\n          error: undefined,\n          returnNow: true\n        };\n      } else {\n        // If the data is stale, return data, and request continue\n        return {\n          data: cacheData?.data,\n          error: undefined\n        };\n      }\n    },\n    onRequest: (service, args) => {\n      let servicePromise = getCachePromise(cacheKey);\n\n      // If has servicePromise, and is not trigger by self, then use it\n      if (servicePromise && servicePromise !== currentPromise) {\n        return { servicePromise };\n      }\n\n      servicePromise = service(...args);\n      currentPromise = servicePromise;\n      setCachePromise(cacheKey, servicePromise);\n      return { servicePromise };\n    },\n    onSuccess: (data, params) => {\n      if (cacheKey) {\n        // cancel subscribe, avoid trgger self\n        unSubscribe?.();\n        _setCache(cacheKey, {\n          data,\n          params,\n          time: new Date().getTime()\n        });\n        // resubscribe\n        unSubscribe = subscribe(cacheKey, (d) => {\n          fetchInstance.data.value = d;\n        });\n      }\n    },\n    onMutate: (data) => {\n      if (cacheKey) {\n        // cancel subscribe, avoid trigger self\n        unSubscribe?.();\n        _setCache(cacheKey, {\n          data,\n          params: fetchInstance.params,\n          time: new Date().getTime()\n        });\n        // resubscribe\n        unSubscribe = subscribe(cacheKey, (d) => {\n          fetchInstance.data.value = d;\n        });\n      }\n    }\n  };\n};\n\nexport default useCachePlugin;\n"],"names":["cacheData"],"mappings":"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"}