fkg 1.0.0 → 1.0.1

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 CHANGED
@@ -1,6 +1,69 @@
1
- class key {
2
- connect(port,host){
3
-
1
+ 'use strict';
2
+ const {str} = require('./utils/type');
3
+ const {isDir,isFile,link,addDir,addJson,readJson} = require('./utils/fs');
4
+ class fkg {
5
+ constructor(dir) {
6
+ this.is = {};
7
+ this.data = {};
8
+ this.dirs = {};
9
+ let deal = async()=> {
10
+ if(isDir(dir)) {
11
+ this.dir = dir;
12
+ this.dir = link(dir,'./data');
13
+ if(!isDir(this.dir)) await addDir(this.dir);
14
+ setInterval(async () => {
15
+ for (const key in this.is) {
16
+ if(this.is[key]>3){
17
+ this.is[key] = 0;
18
+ await addJson(this.dirs[key],this.data[key]);
19
+ }
20
+ }
21
+ },5000);
22
+ }else{
23
+ this.dir = null;
24
+ }
25
+ }
26
+ deal();
27
+ }
28
+ async table(n) {
29
+ if(!n||!str(n)) return;
30
+ if(this.dir) {
31
+ this.is[n] = 0;
32
+ if(!this.data[n]) {
33
+ this.dirs[n] = link(this.dir,'./'+n+'.fkg');
34
+ if(isFile(this.dirs[n])){
35
+ const res = await readJson(this.dirs[n]);
36
+ if(res) {
37
+ this.data[n] = res;
38
+ }else{
39
+ this.data[n] = {};
40
+ }
41
+ }else{
42
+ this.data[n] = {};
43
+ }
44
+ }
45
+ }else{
46
+ if(!this.data[n]) this.data[n] = {};
47
+ }
48
+ const that = this;
49
+ return {
50
+ list(){
51
+ return that.data[n];
52
+ },
53
+ get(id){
54
+ return that.data[n][id];
55
+ },
56
+ set(id,d){
57
+ that.is[n]++;
58
+ that.data[n][id] = d;
59
+ return true;
60
+ },
61
+ del(id){
62
+ that.is[n]++;
63
+ delete that.data[n][id];
64
+ return true;
65
+ }
66
+ }
4
67
  }
5
68
  }
6
- module.exports = key;
69
+ module.exports = fkg;
@@ -0,0 +1,148 @@
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
+ return new Promise((resolve) => {
13
+ try {
14
+ fs.writeFileSync(url, data,{encoding:'utf8'});
15
+ resolve(true);
16
+ } catch (err) {
17
+ resolve(false);
18
+ }
19
+ })
20
+ }
21
+ module.exports = {
22
+ isDir,
23
+ addFile,
24
+ link(...args){
25
+ return path.resolve(...args)
26
+ },
27
+ isFile(url) {
28
+ if (fs.existsSync(url)) {
29
+ const stats = fs.statSync(url);
30
+ return stats.isFile();
31
+ } else {
32
+ return false;
33
+ }
34
+ },
35
+ addJson(url,data){
36
+ return addFile(url,JSON.stringify(data));
37
+ },
38
+ readJson(url){
39
+ return new Promise((resolve) => {
40
+ fs.readFile(url, 'utf8', (err, data) => {
41
+ if (err) {
42
+ resolve(null);
43
+ }else{
44
+ if(data) {
45
+ resolve(JSON.parse(data))
46
+ }else{
47
+ resolve(null);
48
+ }
49
+ }
50
+ });
51
+ })
52
+ },
53
+ readFile(url) {
54
+ return new Promise((resolve) => {
55
+ fs.readFile(url, 'utf8', (err, data) => {
56
+ if (err) {
57
+ resolve(null);
58
+ }else{
59
+ resolve(data) ;
60
+ }
61
+ });
62
+ })
63
+ },
64
+ readList(url){
65
+ return fs.readdirSync(url);
66
+ },
67
+ dirFile(paths) {
68
+ let obj = {};
69
+ obj[paths] = 'dir';
70
+ const arrFile = (url) => {
71
+ const item = fs.readdirSync(url);
72
+ if (item.length > 0) {
73
+ let dir = [];
74
+ item.forEach(e => {
75
+ const ets = path.resolve(url, e);
76
+ if (isDir(ets)) {
77
+ dir.push(ets);
78
+ obj[ets] = 'dir';
79
+ } else {
80
+ obj[ets] = 'file';
81
+ }
82
+ });
83
+ for (let i = 0; i < dir.length; i++) {
84
+ arrFile(dir[i]);
85
+ };
86
+ }
87
+ }
88
+ arrFile(paths);
89
+ return obj;
90
+ },
91
+ addDir(url) {
92
+ return new Promise((resolve) => {
93
+ fs.mkdir(url, e => {
94
+ if (e) {
95
+ resolve(false);
96
+ } else {
97
+ resolve(true);
98
+ }
99
+ })
100
+ })
101
+ },
102
+ delFile(url) {
103
+ return new Promise((resolve) => {
104
+ fs.unlink(url, e => {
105
+ if (e) {
106
+ resolve(false);
107
+ } else {
108
+ resolve(true);
109
+ }
110
+ })
111
+ })
112
+ },
113
+ getSize(obj) {
114
+ let size = 0;
115
+ for (const key in obj) {
116
+ if (obj[key] === 'file') {
117
+ size += fs.statSync(key).size;
118
+ }
119
+ }
120
+ return size
121
+ },
122
+ copyFile(old, news, def) {
123
+ return new Promise((resolve) => {
124
+ // 创建可读流来读取源文件
125
+ const oldStream = fs.createReadStream(old);
126
+ // 创建可写流来写入目标文件
127
+ const newStream = fs.createWriteStream(news);
128
+ // 使用管道将源文件的流复制到目标文件流中
129
+ oldStream.pipe(newStream);
130
+ // 处理错误和结束事件
131
+ oldStream.on('data', (data) => {
132
+ if (def) def(data.length);
133
+ })
134
+ oldStream.on('error', () => {
135
+ newStream.close();
136
+ resolve(false);
137
+ });
138
+ newStream.on('error', () => {
139
+ oldStream.close();
140
+ resolve(false);
141
+ });
142
+ // 当源文件流结束时,表示复制完成,可以处理结束事件
143
+ oldStream.on('end', () => {
144
+ resolve(true);
145
+ });
146
+ })
147
+ }
148
+ }
@@ -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
- "name": "fkg",
3
- "version": "1.0.0",
4
- "description": "Read and set memory key!",
5
- "main": "lib/index.js",
6
- "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
8
- },
9
- "keywords": [
10
- "key"
11
- ],
12
- "author": "weduu",
13
- "license": "MIT"
14
- }
1
+ {
2
+ "name": "fkg",
3
+ "version": "1.0.1",
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
+ }