{"version":3,"file":"useGlobalCache.cjs","sources":["../../../../../../packages/theme/cssinjs/hooks/useGlobalCache.ts"],"sourcesContent":["import type { Ref, ShallowRef } from 'vue';\nimport type { KeyType } from '../Cache';\nimport { onBeforeUnmount, shallowRef, watch, watchEffect } from 'vue';\nimport { useStyleInject } from '../StyleContext';\nimport useHMR from './useHMR';\n\nexport default function useClientCache<CacheType>(\n  prefix: string,\n  keyPath: Ref<KeyType[]>,\n  cacheFn: () => CacheType,\n  onCacheRemove?: (cache: CacheType, fromHMR: boolean) => void,\n): ShallowRef<CacheType> {\n  const styleContext = useStyleInject();\n  const fullPathStr = shallowRef('');\n  const res = shallowRef<CacheType>();\n  watchEffect(() => {\n    fullPathStr.value = [prefix, ...keyPath.value].join('%');\n  });\n  const HMRUpdate = useHMR();\n  const clearCache = (pathStr: string) => {\n    styleContext.value.cache.update(pathStr, (prevCache) => {\n      const [times = 0, cache] = prevCache || [];\n      const nextCount = times - 1;\n      if (nextCount === 0) {\n        onCacheRemove?.(cache, false);\n        return null;\n      }\n\n      return [times - 1, cache];\n    });\n  };\n\n  watch(\n    fullPathStr,\n    (newStr, oldStr) => {\n      if (oldStr) clearCache(oldStr);\n      // Create cache\n      styleContext.value.cache.update(newStr, (prevCache) => {\n        const [times = 0, cache] = prevCache || [];\n\n        // HMR should always ignore cache since developer may change it\n        let tmpCache = cache;\n        if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n          onCacheRemove?.(tmpCache, HMRUpdate);\n          tmpCache = null;\n        }\n        const mergedCache = tmpCache || cacheFn();\n\n        return [times + 1, mergedCache];\n      });\n      res.value = styleContext.value.cache.get(fullPathStr.value)![1];\n    },\n    { immediate: true },\n  );\n  onBeforeUnmount(() => {\n    clearCache(fullPathStr.value);\n  });\n  return res;\n}\n"],"names":["useStyleInject","shallowRef","watchEffect","useHMR","watch","onBeforeUnmount"],"mappings":";;;;;;;;AAMA,SAAwB,cACtB,CAAA,MAAA,EACA,OACA,EAAA,OAAA,EACA,aACuB,EAAA;AACvB,EAAA,MAAM,eAAeA,2BAAe,EAAA,CAAA;AACpC,EAAM,MAAA,WAAA,GAAcC,eAAW,EAAE,CAAA,CAAA;AACjC,EAAA,MAAM,MAAMA,cAAsB,EAAA,CAAA;AAClC,EAAAC,eAAA,CAAY,MAAM;AAChB,IAAY,WAAA,CAAA,KAAA,GAAQ,CAAC,MAAQ,EAAA,GAAG,QAAQ,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA,CAAA;AAAA,GACxD,CAAA,CAAA;AACD,EAAA,MAAM,YAAYC,cAAO,EAAA,CAAA;AACzB,EAAM,MAAA,UAAA,GAAa,CAAC,OAAoB,KAAA;AACtC,IAAA,YAAA,CAAa,KAAM,CAAA,KAAA,CAAM,MAAO,CAAA,OAAA,EAAS,CAAC,SAAc,KAAA;AACtD,MAAA,MAAM,CAAC,KAAQ,GAAA,CAAA,EAAG,KAAK,CAAA,GAAI,aAAa,EAAC,CAAA;AACzC,MAAA,MAAM,YAAY,KAAQ,GAAA,CAAA,CAAA;AAC1B,MAAA,IAAI,cAAc,CAAG,EAAA;AACnB,QAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAgB,KAAO,EAAA,KAAA,CAAA,CAAA;AACvB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAO,OAAA,CAAC,KAAQ,GAAA,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAAC,SAAA;AAAA,IACE,WAAA;AAAA,IACA,CAAC,QAAQ,MAAW,KAAA;AAClB,MAAI,IAAA,MAAA;AAAQ,QAAA,UAAA,CAAW,MAAM,CAAA,CAAA;AAE7B,MAAA,YAAA,CAAa,KAAM,CAAA,KAAA,CAAM,MAAO,CAAA,MAAA,EAAQ,CAAC,SAAc,KAAA;AACrD,QAAA,MAAM,CAAC,KAAQ,GAAA,CAAA,EAAG,KAAK,CAAA,GAAI,aAAa,EAAC,CAAA;AAGzC,QAAA,IAAI,QAAW,GAAA,KAAA,CAAA;AACf,QAAA,IAAI,OAAQ,CAAA,GAAA,CAAI,QAAa,KAAA,YAAA,IAAgB,SAAS,SAAW,EAAA;AAC/D,UAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAgB,QAAU,EAAA,SAAA,CAAA,CAAA;AAC1B,UAAW,QAAA,GAAA,IAAA,CAAA;AAAA,SACb;AACA,QAAM,MAAA,WAAA,GAAc,YAAY,OAAQ,EAAA,CAAA;AAExC,QAAO,OAAA,CAAC,KAAQ,GAAA,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,OAC/B,CAAA,CAAA;AACD,MAAI,GAAA,CAAA,KAAA,GAAQ,aAAa,KAAM,CAAA,KAAA,CAAM,IAAI,WAAY,CAAA,KAAK,EAAG,CAAC,CAAA,CAAA;AAAA,KAChE;AAAA,IACA,EAAE,WAAW,IAAK,EAAA;AAAA,GACpB,CAAA;AACA,EAAAC,mBAAA,CAAgB,MAAM;AACpB,IAAA,UAAA,CAAW,YAAY,KAAK,CAAA,CAAA;AAAA,GAC7B,CAAA,CAAA;AACD,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}