@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
69 lines (52 loc) • 1.88 kB
text/typescript
// this can be used to cache bust between releases. Incrementing this will remove all caches using the previous version
const globalCacheVersion = 5
const globalCachePrefix = 'cache-key'
const globalCacheKeyPrefix = `${globalCachePrefix}-${globalCacheVersion}`
export function getCacheKey(label: string): string {
return `${globalCacheKeyPrefix}:${label}`
}
type CacheKeyFunction = (key: string) => string
export function createCacheKeyFunction(version: number, prefix: string): CacheKeyFunction {
const cachePrefix = `${globalCacheKeyPrefix}-${prefix}___`
const cachePrefixWithVersion = `${cachePrefix}-${version}`
clearOldFeatureCacheKeys(cachePrefix, cachePrefixWithVersion)
return (key: string) => `${cachePrefixWithVersion}-${key}`
}
function clearOldFeatureCacheKeys(prefix: string, prefixWithVersion: string): void {
const isOldFeatureCacheKey = (key: string): boolean => {
return key.startsWith(prefix) && !key.startsWith(prefixWithVersion)
}
Object.keys(sessionStorage).forEach(key => {
if (isOldFeatureCacheKey(key)) {
sessionStorage.removeItem(key)
}
})
Object.keys(localStorage).forEach(key => {
if (isOldFeatureCacheKey(key)) {
localStorage.removeItem(key)
}
})
}
export function isCacheKey(key: string): boolean {
return key.startsWith(globalCachePrefix)
}
export function isOldCacheKey(key: string): boolean {
if (!isCacheKey(key)) {
return false
}
return !key.startsWith(globalCacheKeyPrefix)
}
export function clearOldCacheKeys(): void {
const sessionStorageKeys = Object.keys(sessionStorage)
sessionStorageKeys.forEach(key => {
if (isOldCacheKey(key)) {
sessionStorage.removeItem(key)
}
})
const localStorageKeys = Object.keys(localStorage)
localStorageKeys.forEach(key => {
if (isOldCacheKey(key)) {
localStorage.removeItem(key)
}
})
}