-
Notifications
You must be signed in to change notification settings - Fork 1
/
cache.js
53 lines (52 loc) · 1.78 KB
/
cache.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function getStorage(isSession) {
return isSession ? sessionStorage : localStorage;
}
const cache = {
get(key, isSession = true, val = null) {
const storage = getStorage(isSession);
let ret = storage.getItem(key);
if (!ret && val !== null) return val; //default val
const char = ret && ret.slice(0, 1);
if (char && (char === '{' || char === '[')) {
ret = JSON.parse(ret);
if (ret.expires) {
if (ret.expires >= Date.now()) {
if ('value' in ret && Object.keys(ret).length === 2) {
ret = ret.value;
} else {
delete ret.expires;
}
} else {
ret = val !== null ? val : null;
this.del(key, isSession)
}
}
} else if (ret === 'true' || ret=== 'false') {
ret = ret === 'true';
}
return ret;
},
hget(key, hash, isSession = true) {
return this.get(key, isSession, {})[hash];
},
set(key, value, isSession = true, seconds = 0) {
const storage = getStorage(isSession);
let val = value;
if (seconds) {
const expires = Date.now() + seconds;
val = Object.assign({}, typeof value === 'object' ? value : { value }, { expires });
}
if (typeof value === 'object') val = JSON.stringify(val);
storage.setItem(key, val);
},
hset(key, hash, val, isSession = true) {
const ob = this.get(key, isSession, {});
ob[hash] = val;
this.set(key, ob, isSession);
},
del(key, isSession = true) {
const storage = getStorage(isSession);
storage.removeItem(key);
}
};
export default cache;