UNPKG

@fast-china/utils

Version:

Fast 工具库.

1 lines 14 kB
{"version":3,"file":"index.mjs","sources":["../../../../src/storage/index.ts"],"sourcesContent":["import { computed, reactive } from \"vue\";\nimport { base64Util } from \"../base64\";\nimport { consoleError } from \"../console\";\nimport { FastError } from \"../error\";\n\nconst state = reactive({\n\tprefix: \"fast__\",\n\texpireSuffix: \"__Expire\",\n\tcrypto: false,\n});\n\n/**\n * 本地缓存前缀 Key\n */\nexport const CACHE_PREFIX = computed(() => state.prefix);\n\n/**\n * 本地缓存过期值后缀 Key\n */\nexport const CACHE_EXPIRE_SUFFIX = computed(() => state.expireSuffix);\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const useStorage = () => {\n\treturn {\n\t\t/**\n\t\t * 设置缓存前缀 Key\n\t\t * @param key\n\t\t */\n\t\tsetPrefix(key: string): void {\n\t\t\tstate.prefix = key;\n\t\t},\n\t\t/**\n\t\t * 缓存过期值后缀 Key\n\t\t * @param key\n\t\t */\n\t\tsetExpireSuffix(key: string): void {\n\t\t\tstate.expireSuffix = key;\n\t\t},\n\t\t/**\n\t\t * 设置缓存是否加密\n\t\t * @description 请在初始化的时候确认,后续不可再修改,否则所有数据都将失效\n\t\t * @param crypto\n\t\t */\n\t\tsetCrypto(crypto: boolean): void {\n\t\t\tstate.crypto = crypto;\n\t\t},\n\t};\n};\n\nconst storage = {\n\tset(key: string, val: any): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.setStorageSync(key, val);\n\t\t} else {\n\t\t\twindow.localStorage.setItem(key, val);\n\t\t}\n\t},\n\tget(key: string): string | any | null {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\treturn uni.getStorageSync(key);\n\t\t} else {\n\t\t\treturn window.localStorage.getItem(key);\n\t\t}\n\t},\n\tremove(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.removeStorageSync(key);\n\t\t} else {\n\t\t\twindow.localStorage.removeItem(key);\n\t\t}\n\t},\n\tclear(): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.clearStorageSync();\n\t\t} else {\n\t\t\twindow.localStorage.clear();\n\t\t}\n\t},\n\tkeys(): string[] | Storage {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\treturn uni.getStorageInfoSync().keys;\n\t\t} else {\n\t\t\treturn window.localStorage;\n\t\t}\n\t},\n};\n\n/**\n * window.localStorage\n * - 如果是 UniApp 环境则使用的是 uni.xxxStorage\n */\nexport const Local = {\n\t/**\n\t * 设置\n\t * @param key 缓存的Key\n\t * @param val 缓存值\n\t * @param expire 过期时间,单位分钟\n\t * @param encrypt 是否对缓存的数据加密\n\t */\n\tset(key: string, val: any, expire?: number, encrypt?: boolean): void {\n\t\ttry {\n\t\t\tencrypt ??= state.crypto;\n\t\t\t// 判断是否存在缓存过期时间\n\t\t\tif (expire) {\n\t\t\t\tif (isNaN(expire) || expire < 1) {\n\t\t\t\t\tthrow new FastError(\"有效期应为一个有效数值\");\n\t\t\t\t}\n\t\t\t\t// 设置过期时间的缓存\n\t\t\t\tconst expireData = {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\texpire,\n\t\t\t\t};\n\t\t\t\tconst expireJson = JSON.stringify(expireData);\n\t\t\t\tstorage.set(`${state.prefix}${key}${state.expireSuffix}`, expireJson);\n\t\t\t}\n\t\t\tlet valJson = JSON.stringify(val);\n\t\t\tif (encrypt) {\n\t\t\t\tvalJson = base64Util.toBase64(valJson);\n\t\t\t}\n\t\t\tstorage.set(`${state.prefix}${key}`, valJson);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 获取\n\t * @param key 缓存的Key\n\t * @param decrypt 是否对缓存的数据解密\n\t * @returns {T} 传入的对象类型,默认为 string\n\t */\n\tget<T = string>(key: string, decrypt?: boolean): T {\n\t\ttry {\n\t\t\tdecrypt ??= state.crypto;\n\t\t\t// 获取缓存 JSON 字符串\n\t\t\tlet valJson = storage.get(`${state.prefix}${key}`);\n\n\t\t\tif (valJson) {\n\t\t\t\t// 判断是否解密\n\t\t\t\tif (decrypt) {\n\t\t\t\t\tvalJson = base64Util.base64ToStr(valJson);\n\t\t\t\t}\n\t\t\t\t// 尝试获取缓存过期时间的 JSON 字符串\n\t\t\t\tconst expireJson = storage.get(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t// 判断是否存在过期时间\n\t\t\t\tif (expireJson) {\n\t\t\t\t\tconst expireData = JSON.parse(expireJson);\n\t\t\t\t\tif (Date.now() > expireData.time + expireData.expire * 60 * 1000) {\n\t\t\t\t\t\t// 过期了,删除对应的缓存数据\n\t\t\t\t\t\tstorage.remove(`${state.prefix}${key}`);\n\t\t\t\t\t\tstorage.remove(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(valJson) as T;\n\t\t\t\t} catch {\n\t\t\t\t\treturn valJson as T;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除\n\t * @param key 缓存的Key\n\t */\n\tremove(key: string): void {\n\t\ttry {\n\t\t\tstorage.remove(`${state.prefix}${key}`);\n\t\t\tstorage.remove(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 根据前缀移除\n\t * @param key 缓存的Key\n\t */\n\tremoveByPrefix(key: string): void {\n\t\ttry {\n\t\t\tfor (const itemKey in storage.keys) {\n\t\t\t\tif (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {\n\t\t\t\t\tstorage.remove(itemKey);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除全部\n\t */\n\tclear(): void {\n\t\ttry {\n\t\t\tstorage.clear();\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n};\n\n/**\n * window.sessionStorage\n * - UniApp 环境下不可用\n */\nexport const Session = {\n\t/**\n\t * 设置会话缓存\n\t * @param key 缓存的Key\n\t * @param val 缓存值\n\t * @param expire 过期时间,单位分钟\n\t * @param encrypt 是否对缓存的数据加密\n\t */\n\tset(key: string, val: any, expire?: number, encrypt?: boolean): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tencrypt ??= state.crypto;\n\t\t\t// 判断是否存在缓存过期时间\n\t\t\tif (expire) {\n\t\t\t\tif (isNaN(expire) || expire < 1) {\n\t\t\t\t\tthrow new FastError(\"有效期应为一个有效数值\");\n\t\t\t\t}\n\t\t\t\t// 设置过期时间的缓存\n\t\t\t\tconst expireData = {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\texpire,\n\t\t\t\t};\n\t\t\t\tconst expireJson = JSON.stringify(expireData);\n\t\t\t\twindow.sessionStorage.setItem(`${state.prefix}${key}${state.expireSuffix}`, expireJson);\n\t\t\t}\n\t\t\tlet valJson = JSON.stringify(val);\n\t\t\tif (encrypt) {\n\t\t\t\tvalJson = base64Util.toBase64(valJson);\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem(`${state.prefix}${key}`, valJson);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 获取会话缓存\n\t * @param key 缓存的Key\n\t * @param decrypt 是否对缓存的数据解密\n\t * @returns {T} 传入的对象类型,默认为 string\n\t */\n\tget<T = string>(key: string, decrypt?: boolean): T {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tdecrypt ??= state.crypto;\n\t\t\t// 获取缓存 JSON 字符串\n\t\t\tlet valJson = window.sessionStorage.getItem(`${state.prefix}${key}`);\n\t\t\tif (valJson) {\n\t\t\t\t// 判断是否解密\n\t\t\t\tif (decrypt) {\n\t\t\t\t\tvalJson = base64Util.base64ToStr(valJson);\n\t\t\t\t}\n\t\t\t\t// 尝试获取缓存过期时间的 JSON 字符串\n\t\t\t\tconst expireJson = window.sessionStorage.getItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t// 判断是否存在过期时间\n\t\t\t\tif (expireJson) {\n\t\t\t\t\tconst expireData = JSON.parse(expireJson);\n\t\t\t\t\tif (Date.now() > expireData.time + expireData.expire * 60 * 1000) {\n\t\t\t\t\t\t// 过期了,删除对应的缓存数据\n\t\t\t\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}`);\n\t\t\t\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(valJson) as T;\n\t\t\t\t} catch {\n\t\t\t\t\treturn valJson as T;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除会话缓存\n\t * @param key 缓存的Key\n\t */\n\tremove(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}`);\n\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 根据前缀移除会话缓存\n\t * @param key 缓存的Key\n\t */\n\tremoveByPrefix(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfor (const itemKey in window.sessionStorage) {\n\t\t\t\tif (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {\n\t\t\t\t\twindow.sessionStorage.removeItem(itemKey);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除全部会话缓存\n\t */\n\tclear(): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\twindow.sessionStorage.clear();\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n};\n"],"names":["state","reactive","prefix","expireSuffix","crypto","CACHE_PREFIX","computed","CACHE_EXPIRE_SUFFIX","useStorage","setPrefix","key","setExpireSuffix","setCrypto","storage","set","val","uni","setStorageSync","window","localStorage","setItem","get","getStorageSync","getItem","remove","removeStorageSync","removeItem","clear","clearStorageSync","keys","getStorageInfoSync","Local","expire","encrypt","isNaN","FastError","expireData","time","Date","now","expireJson","JSON","stringify","valJson","base64Util","toBase64","error","consoleError","decrypt","base64ToStr","parse","removeByPrefix","itemKey","indexOf","Session","sessionStorage"],"mappings":"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"}