-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
137 lines (129 loc) · 3.22 KB
/
index.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const {existsSync, readFileSync,readdirSync,mkdirSync,writeFileSync,statSync,unlinkSync} = require('fs');
const FileCache = {
/**
* Load config file or set default configs.
*
* @param configFilePath
*/
config: (configFilePath = undefined) => {
let defaultConfig = {
cacheLocation: '.cache',
ttl: 60
};
if (configFilePath && existsSync(configFilePath)) {
const customConfig = readFileSync(configFilePath, 'utf8');
Object.assign(defaultConfig, JSON.parse(customConfig));
}
return defaultConfig;
},
/**
* Set the cache file with a default of 60 TTL
*
* @param key identifier
* @param value to be stored
* @param ttl tile to live set to a 60 min default
*/
cacheSet: async (key, value, ttl = 60, location = '.cache') => {
if(!existsSync(location)){
mkdirSync(location, { recursive: true });
}
const fileName = `${key}_${ttl}`;
await writeFileSync(`${location}/${fileName}`,value,{encoding:'utf8',flag:'w'});
return true;
},
/**
* Set the cache file with a default of 60 TTL
*
* @param key identifier
* @param value to be stored
* @param ttl tile to live set to a 60 min default
* @deprecated This method will be removed.
*/
set: async (key, value, ttl = 60, location = '.cache') => {
return FileCache.cacheSet(key, value, ttl, location);
},
/**
* Get cache file by key.
*
* @param key
*/
cacheGet: (key) => {
if(!existsSync('.cache')){
return false;
}
const getFileByKey = readdirSync('.cache').filter(fn => fn.startsWith(key));
if(!getFileByKey.length){
return false;
}
let contents = null;
getFileByKey.map( async (item) => {
const getFileTTL = item.split("_").pop()*60*1000;
const fileInfo = statSync(`.cache/${item}`);
const fileCreation = fileInfo.birthtimeMs;
const ttl =Date.now()-fileCreation;
if(ttl <= getFileTTL && !contents){
contents = readFileSync(`.cache/${item}`, 'utf8')
}
if(ttl > getFileTTL){
unlinkSync(`.cache/${item}`)
}
})
if(!contents){
return false
}
return contents;
},
/**
* Get cache file by key.
*
* @param key
* @deprecated This method will be removed.
*/
get: (key) => {
return FileCache.cacheGet(key)
},
/**
* Remove a cached file using its key identifier.
*
* @param key
*/
cacheRemove: (key) => {
const getFileByKey = readdirSync('.cache').filter(fn => fn.startsWith(key));
if(!getFileByKey.length){
return false;
}
getFileByKey.map(item => {
unlinkSync(`.cache/${item}`)
})
return true;
},
/**
* Remove a cached file using its key identifier.
*
* @param key
* @deprecated This method will be removed.
*/
remove:(key) => {
return FileCache.cacheRemove(key);
},
/**
* Clear all cache files
*/
cacheRemoveAll: () => {
if(!existsSync('.cache')){
return true;
}
readdirSync('.cache').map(item => {
unlinkSync(`.cache/${item}`)
})
return true;
},
/**
* Clear all cache files
* @deprecated This method will be removed.
*/
removeAll: () => {
return FileCache.cacheRemoveAll();
}
}
module.exports = FileCache;