56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
import { isNullOrUndef } from '@/utils/is'
|
|
|
|
class Storage {
|
|
constructor(option) {
|
|
this.storage = option.storage
|
|
this.prefixKey = option.prefixKey
|
|
}
|
|
|
|
getKey(key) {
|
|
return `${this.prefixKey}${key}`.toUpperCase()
|
|
}
|
|
|
|
set(key, value, expire) {
|
|
const stringData = JSON.stringify({
|
|
value,
|
|
time: Date.now(),
|
|
expire: !isNullOrUndef(expire) ? new Date().getTime() + expire * 1000 : null,
|
|
})
|
|
this.storage.setItem(this.getKey(key), stringData)
|
|
}
|
|
|
|
get(key) {
|
|
const { value } = this.getItem(key, {})
|
|
return value
|
|
}
|
|
|
|
getItem(key, def = null) {
|
|
const val = this.storage.getItem(this.getKey(key))
|
|
if (!val) return def
|
|
try {
|
|
const data = JSON.parse(val)
|
|
const { value, time, expire } = data
|
|
if (isNullOrUndef(expire) || expire > new Date().getTime()) {
|
|
return { value, time }
|
|
}
|
|
this.remove(key)
|
|
return def
|
|
} catch (error) {
|
|
this.remove(key)
|
|
return def
|
|
}
|
|
}
|
|
|
|
remove(key) {
|
|
this.storage.removeItem(this.getKey(key))
|
|
}
|
|
|
|
clear() {
|
|
this.storage.clear()
|
|
}
|
|
}
|
|
|
|
export function createStorage({ prefixKey = '', storage = sessionStorage }) {
|
|
return new Storage({ prefixKey, storage })
|
|
}
|