fkg 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +56 -4
- package/lib/utils/fs.js +135 -0
- package/lib/utils/type.js +45 -0
- package/package.json +12 -14
package/lib/index.js
CHANGED
|
@@ -1,6 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
const {str,obj,arr} = require('./utils/type');
|
|
3
|
+
const {isDir,isFile,link,addDir,addJson,readJson,delFile} = require('./utils/fs');
|
|
4
|
+
class fkg {
|
|
5
|
+
constructor(arg) {
|
|
6
|
+
this.is = {};
|
|
7
|
+
this.data = {};
|
|
8
|
+
this.dirs = {};
|
|
9
|
+
this.dir = null;
|
|
10
|
+
if(arg&&obj(arg)) {
|
|
11
|
+
if(arg.dir&&isDir(arg.dir)){
|
|
12
|
+
this.dir = link(arg.dir,'./data');
|
|
13
|
+
if(!isDir(this.dir)) addDir(this.dir);
|
|
14
|
+
}
|
|
15
|
+
if(arg.dbName&&arr(arg.dbName)&&arr.length>0){
|
|
16
|
+
for (let i = 0;i < arg.dbName.length;i++) {
|
|
17
|
+
const n = arg.dbName[i];
|
|
18
|
+
this.data[n] = {};
|
|
19
|
+
if(this.dir) {
|
|
20
|
+
this.dirs[n] = link(this.dir,'./'+n);
|
|
21
|
+
if(!isDir(this.dirs[n])) addDir(this.dirs[n]);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
table(n) {
|
|
28
|
+
if(!n||!str(n)) return;
|
|
29
|
+
if(!this.data[n]) this.data[n] = {};
|
|
30
|
+
const that = this;
|
|
31
|
+
return {
|
|
32
|
+
list(){
|
|
33
|
+
return that.data[n];
|
|
34
|
+
},
|
|
35
|
+
get(id){
|
|
36
|
+
if(that.dir&&!that.data[n][id]) {
|
|
37
|
+
const url = link(that.dirs[n],'./'+id);
|
|
38
|
+
if(isFile(url)){
|
|
39
|
+
const res = readJson(url);
|
|
40
|
+
if(res) that.data[n][id] = res;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return that.data[n][id];
|
|
44
|
+
},
|
|
45
|
+
set(id,d){
|
|
46
|
+
that.data[n][id] = d;
|
|
47
|
+
if(that.dir) addJson(link(that.dirs[n],'./'+id),d);
|
|
48
|
+
return true;
|
|
49
|
+
},
|
|
50
|
+
del(id){
|
|
51
|
+
delete that.data[n][id];
|
|
52
|
+
if(that.dir) delFile(link(that.dirs[n],'./'+id));
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
4
56
|
}
|
|
5
57
|
}
|
|
6
|
-
module.exports =
|
|
58
|
+
module.exports = fkg;
|
package/lib/utils/fs.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const isDir = (url) => {
|
|
4
|
+
if (fs.existsSync(url)) {
|
|
5
|
+
const stat = fs.statSync(url);
|
|
6
|
+
return stat.isDirectory();
|
|
7
|
+
} else {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const addFile = (url, data)=>{
|
|
12
|
+
try {
|
|
13
|
+
fs.writeFileSync(url, data,{encoding:'utf8'});
|
|
14
|
+
return true;
|
|
15
|
+
} catch (err) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
module.exports = {
|
|
20
|
+
isDir,
|
|
21
|
+
addFile,
|
|
22
|
+
link(...args){
|
|
23
|
+
return path.resolve(...args)
|
|
24
|
+
},
|
|
25
|
+
isFile(url) {
|
|
26
|
+
if (fs.existsSync(url)) {
|
|
27
|
+
const stats = fs.statSync(url);
|
|
28
|
+
return stats.isFile();
|
|
29
|
+
} else {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
addJson(url,data){
|
|
34
|
+
return addFile(url,JSON.stringify(data));
|
|
35
|
+
},
|
|
36
|
+
readJson(url){
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(fs.readFileSync(url));
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return null
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
readFile(url) {
|
|
44
|
+
return new Promise((resolve) => {
|
|
45
|
+
fs.readFile(url, 'utf8', (err, data) => {
|
|
46
|
+
if (err) {
|
|
47
|
+
resolve(null);
|
|
48
|
+
}else{
|
|
49
|
+
resolve(data) ;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
})
|
|
53
|
+
},
|
|
54
|
+
readdirSync(url){
|
|
55
|
+
return fs.readdirSync(url);
|
|
56
|
+
},
|
|
57
|
+
dirFile(paths) {
|
|
58
|
+
let obj = {};
|
|
59
|
+
obj[paths] = 'dir';
|
|
60
|
+
const arrFile = (url) => {
|
|
61
|
+
const item = fs.readdirSync(url);
|
|
62
|
+
if (item.length > 0) {
|
|
63
|
+
let dir = [];
|
|
64
|
+
item.forEach(e => {
|
|
65
|
+
const ets = path.resolve(url, e);
|
|
66
|
+
if (isDir(ets)) {
|
|
67
|
+
dir.push(ets);
|
|
68
|
+
obj[ets] = 'dir';
|
|
69
|
+
} else {
|
|
70
|
+
obj[ets] = 'file';
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
for (let i = 0; i < dir.length; i++) {
|
|
74
|
+
arrFile(dir[i]);
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
arrFile(paths);
|
|
79
|
+
return obj;
|
|
80
|
+
},
|
|
81
|
+
addDir(url) {
|
|
82
|
+
try {
|
|
83
|
+
fs.mkdirSync(url);
|
|
84
|
+
return true;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
return false
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
mkdirSync(url) {
|
|
90
|
+
return fs.mkdirSync(url);
|
|
91
|
+
},
|
|
92
|
+
delFile(url) {
|
|
93
|
+
try {
|
|
94
|
+
fs.unlinkSync(url);
|
|
95
|
+
return true
|
|
96
|
+
} catch (error) {
|
|
97
|
+
return false
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
getSize(obj) {
|
|
101
|
+
let size = 0;
|
|
102
|
+
for (const key in obj) {
|
|
103
|
+
if (obj[key] === 'file') {
|
|
104
|
+
size += fs.statSync(key).size;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return size
|
|
108
|
+
},
|
|
109
|
+
copyFile(old, news, def) {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
// 创建可读流来读取源文件
|
|
112
|
+
const oldStream = fs.createReadStream(old);
|
|
113
|
+
// 创建可写流来写入目标文件
|
|
114
|
+
const newStream = fs.createWriteStream(news);
|
|
115
|
+
// 使用管道将源文件的流复制到目标文件流中
|
|
116
|
+
oldStream.pipe(newStream);
|
|
117
|
+
// 处理错误和结束事件
|
|
118
|
+
oldStream.on('data', (data) => {
|
|
119
|
+
if (def) def(data.length);
|
|
120
|
+
})
|
|
121
|
+
oldStream.on('error', () => {
|
|
122
|
+
newStream.close();
|
|
123
|
+
resolve(false);
|
|
124
|
+
});
|
|
125
|
+
newStream.on('error', () => {
|
|
126
|
+
oldStream.close();
|
|
127
|
+
resolve(false);
|
|
128
|
+
});
|
|
129
|
+
// 当源文件流结束时,表示复制完成,可以处理结束事件
|
|
130
|
+
oldStream.on('end', () => {
|
|
131
|
+
resolve(true);
|
|
132
|
+
});
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const conf = {
|
|
3
|
+
n:/^[1-9]\d*$/,
|
|
4
|
+
ip:/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$/,
|
|
5
|
+
domain:/^([a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,11}$/, //域名
|
|
6
|
+
};
|
|
7
|
+
module.exports = {
|
|
8
|
+
ip(d){
|
|
9
|
+
// 验证ipv4 ipv6
|
|
10
|
+
return conf.ip.test(d);
|
|
11
|
+
},
|
|
12
|
+
domain(d){
|
|
13
|
+
// 验证域名
|
|
14
|
+
return conf.domain.test(d);
|
|
15
|
+
},
|
|
16
|
+
host(d){
|
|
17
|
+
// 验证主机host
|
|
18
|
+
return d=='localhost'||conf.ip.test(d)||conf.domain.test(d);
|
|
19
|
+
},
|
|
20
|
+
number(d) {
|
|
21
|
+
return typeof d=='number'&&conf.n.test(d);
|
|
22
|
+
},
|
|
23
|
+
port(d){
|
|
24
|
+
return 0<=d&&d<=65536&&conf.n.test(d);
|
|
25
|
+
},
|
|
26
|
+
str(d){
|
|
27
|
+
return typeof(d)=='string';
|
|
28
|
+
},
|
|
29
|
+
arr(d){
|
|
30
|
+
return Object.prototype.toString.call(d) === '[object Array]';
|
|
31
|
+
},
|
|
32
|
+
def(d){
|
|
33
|
+
return typeof d === 'function';
|
|
34
|
+
},
|
|
35
|
+
reg(d){
|
|
36
|
+
try {
|
|
37
|
+
return Object.prototype.toString.call(d) === '[object RegExp]';
|
|
38
|
+
} catch (error) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
obj(d){
|
|
43
|
+
return Object.prototype.toString.call(d) === '[object Object]';
|
|
44
|
+
}
|
|
45
|
+
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"license": "MIT"
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "fkg",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Read and set memory key!",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"key",
|
|
8
|
+
"cache"
|
|
9
|
+
],
|
|
10
|
+
"author": "weduu",
|
|
11
|
+
"license": "MIT"
|
|
12
|
+
}
|