-
-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathcache.js
85 lines (71 loc) · 1.69 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// From https://www.npmjs.com/package/memory-cache (Rollup didn't want to bundle it otherwise)
function Cache() {
var _cache = Object.create(null);
var _size = 0;
this.set = function (key, value, time) {
if (
typeof time !== "undefined" &&
(typeof time !== "number" || isNaN(time) || time <= 0)
) {
throw new Error("Cache timeout must be a positive number");
}
var oldRecord = _cache[key];
if (oldRecord) {
clearTimeout(oldRecord.timeout);
} else {
_size++;
}
var record = {
value: value,
expire: time + Date.now(),
};
if (!isNaN(record.expire)) {
record.timeout = setTimeout(() => _del(key), time);
}
_cache[key] = record;
return value;
};
this.del = function (key) {
var canDelete = true;
var oldRecord = _cache[key];
if (oldRecord) {
clearTimeout(oldRecord.timeout);
if (!isNaN(oldRecord.expire) && oldRecord.expire < Date.now()) {
canDelete = false;
}
} else {
canDelete = false;
}
if (canDelete) {
_del(key);
}
return canDelete;
};
function _del(key) {
_size--;
delete _cache[key];
}
this.clear = function () {
for (var key in _cache) {
clearTimeout(_cache[key].timeout);
}
_size = 0;
_cache = Object.create(null);
};
this.get = function (key) {
var data = _cache[key];
if (typeof data != "undefined") {
if (isNaN(data.expire) || data.expire >= Date.now()) {
return data.value;
} else {
// free some space
_size--;
delete _cache[key];
}
}
return null;
};
}
const exp = new Cache();
exp.Cache = Cache;
export default exp;