@fast-china/utils
Version:
Fast 工具库.
309 lines (308 loc) • 8.05 kB
JavaScript
import { reactive, computed } from "vue";
import { base64Util } from "../base64/index.mjs";
import { consoleError } from "../console/index.mjs";
import { FastError } from "../error/index.mjs";
const state = reactive({
prefix: "fast__",
expireSuffix: "__Expire",
crypto: false
});
const CACHE_PREFIX = computed(() => state.prefix);
const CACHE_EXPIRE_SUFFIX = computed(() => state.expireSuffix);
const useStorage = () => {
return {
/**
* 设置缓存前缀 Key
* @param key
*/
setPrefix(key) {
state.prefix = key;
},
/**
* 缓存过期值后缀 Key
* @param key
*/
setExpireSuffix(key) {
state.expireSuffix = key;
},
/**
* 设置缓存是否加密
* @description 请在初始化的时候确认,后续不可再修改,否则所有数据都将失效
* @param crypto
*/
setCrypto(crypto) {
state.crypto = crypto;
}
};
};
const storage = {
set(key, val) {
if (typeof uni !== "undefined") {
uni.setStorageSync(key, val);
} else {
window.localStorage.setItem(key, val);
}
},
get(key) {
if (typeof uni !== "undefined") {
return uni.getStorageSync(key);
} else {
return window.localStorage.getItem(key);
}
},
remove(key) {
if (typeof uni !== "undefined") {
uni.removeStorageSync(key);
} else {
window.localStorage.removeItem(key);
}
},
clear() {
if (typeof uni !== "undefined") {
uni.clearStorageSync();
} else {
window.localStorage.clear();
}
},
keys() {
if (typeof uni !== "undefined") {
return uni.getStorageInfoSync().keys;
} else {
return window.localStorage;
}
}
};
const Local = {
/**
* 设置
* @param key 缓存的Key
* @param val 缓存值
* @param expire 过期时间,单位分钟
* @param encrypt 是否对缓存的数据加密
*/
set(key, val, expire, encrypt) {
try {
encrypt ?? (encrypt = state.crypto);
if (expire) {
if (isNaN(expire) || expire < 1) {
throw new FastError("有效期应为一个有效数值");
}
const expireData = {
time: Date.now(),
expire
};
const expireJson = JSON.stringify(expireData);
storage.set(`${state.prefix}${key}${state.expireSuffix}`, expireJson);
}
let valJson = JSON.stringify(val);
if (encrypt) {
valJson = base64Util.toBase64(valJson);
}
storage.set(`${state.prefix}${key}`, valJson);
} catch (error) {
consoleError("Local", error);
}
},
/**
* 获取
* @param key 缓存的Key
* @param decrypt 是否对缓存的数据解密
* @returns {T} 传入的对象类型,默认为 string
*/
get(key, decrypt) {
try {
decrypt ?? (decrypt = state.crypto);
let valJson = storage.get(`${state.prefix}${key}`);
if (valJson) {
if (decrypt) {
valJson = base64Util.base64ToStr(valJson);
}
const expireJson = storage.get(`${state.prefix}${key}${state.expireSuffix}`);
if (expireJson) {
const expireData = JSON.parse(expireJson);
if (Date.now() > expireData.time + expireData.expire * 60 * 1e3) {
storage.remove(`${state.prefix}${key}`);
storage.remove(`${state.prefix}${key}${state.expireSuffix}`);
return null;
}
}
try {
return JSON.parse(valJson);
} catch {
return valJson;
}
}
return null;
} catch (error) {
consoleError("Local", error);
}
},
/**
* 移除
* @param key 缓存的Key
*/
remove(key) {
try {
storage.remove(`${state.prefix}${key}`);
storage.remove(`${state.prefix}${key}${state.expireSuffix}`);
} catch (error) {
consoleError("Local", error);
}
},
/**
* 根据前缀移除
* @param key 缓存的Key
*/
removeByPrefix(key) {
try {
for (const itemKey in storage.keys) {
if (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {
storage.remove(itemKey);
}
}
} catch (error) {
consoleError("Local", error);
}
},
/**
* 移除全部
*/
clear() {
try {
storage.clear();
} catch (error) {
consoleError("Local", error);
}
}
};
const Session = {
/**
* 设置会话缓存
* @param key 缓存的Key
* @param val 缓存值
* @param expire 过期时间,单位分钟
* @param encrypt 是否对缓存的数据加密
*/
set(key, val, expire, encrypt) {
if (typeof uni !== "undefined") {
consoleError("Session", "UniApp 环境下 [Session] 不可用。");
return;
}
try {
encrypt ?? (encrypt = state.crypto);
if (expire) {
if (isNaN(expire) || expire < 1) {
throw new FastError("有效期应为一个有效数值");
}
const expireData = {
time: Date.now(),
expire
};
const expireJson = JSON.stringify(expireData);
window.sessionStorage.setItem(`${state.prefix}${key}${state.expireSuffix}`, expireJson);
}
let valJson = JSON.stringify(val);
if (encrypt) {
valJson = base64Util.toBase64(valJson);
}
window.sessionStorage.setItem(`${state.prefix}${key}`, valJson);
} catch (error) {
consoleError("Session", error);
}
},
/**
* 获取会话缓存
* @param key 缓存的Key
* @param decrypt 是否对缓存的数据解密
* @returns {T} 传入的对象类型,默认为 string
*/
get(key, decrypt) {
if (typeof uni !== "undefined") {
consoleError("Session", "UniApp 环境下 [Session] 不可用。");
return;
}
try {
decrypt ?? (decrypt = state.crypto);
let valJson = window.sessionStorage.getItem(`${state.prefix}${key}`);
if (valJson) {
if (decrypt) {
valJson = base64Util.base64ToStr(valJson);
}
const expireJson = window.sessionStorage.getItem(`${state.prefix}${key}${state.expireSuffix}`);
if (expireJson) {
const expireData = JSON.parse(expireJson);
if (Date.now() > expireData.time + expireData.expire * 60 * 1e3) {
window.sessionStorage.removeItem(`${state.prefix}${key}`);
window.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);
return null;
}
}
try {
return JSON.parse(valJson);
} catch {
return valJson;
}
}
return null;
} catch (error) {
consoleError("Session", error);
}
},
/**
* 移除会话缓存
* @param key 缓存的Key
*/
remove(key) {
if (typeof uni !== "undefined") {
consoleError("Session", "UniApp 环境下 [Session] 不可用。");
return;
}
try {
window.sessionStorage.removeItem(`${state.prefix}${key}`);
window.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);
} catch (error) {
consoleError("Session", error);
}
},
/**
* 根据前缀移除会话缓存
* @param key 缓存的Key
*/
removeByPrefix(key) {
if (typeof uni !== "undefined") {
consoleError("Session", "UniApp 环境下 [Session] 不可用。");
return;
}
try {
for (const itemKey in window.sessionStorage) {
if (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {
window.sessionStorage.removeItem(itemKey);
}
}
} catch (error) {
consoleError("Session", error);
}
},
/**
* 移除全部会话缓存
*/
clear() {
if (typeof uni !== "undefined") {
consoleError("Session", "UniApp 环境下 [Session] 不可用。");
return;
}
try {
window.sessionStorage.clear();
} catch (error) {
consoleError("Session", error);
}
}
};
export {
CACHE_EXPIRE_SUFFIX,
CACHE_PREFIX,
Local,
Session,
useStorage
};
//# sourceMappingURL=index.mjs.map