@maiyunnet/kebab 2.0.15 → 3.0.0
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/README.md +1 -5
- package/index.d.ts +1 -1
- package/index.js +16 -18
- package/lib/buffer.js +7 -20
- package/lib/captcha.js +6 -44
- package/lib/consistent.js +8 -51
- package/lib/core.d.ts +4 -4
- package/lib/core.js +70 -132
- package/lib/crypto.js +43 -99
- package/lib/db.d.ts +5 -5
- package/lib/db.js +31 -68
- package/lib/dns.d.ts +1 -1
- package/lib/dns.js +12 -50
- package/lib/fs.js +26 -81
- package/lib/jwt.d.ts +3 -3
- package/lib/jwt.js +9 -50
- package/lib/kv.d.ts +4 -4
- package/lib/kv.js +31 -69
- package/lib/lan.js +4 -41
- package/lib/net/cacert.pem +78 -2
- package/lib/net/formdata.js +5 -42
- package/lib/net/request.d.ts +2 -2
- package/lib/net/request.js +3 -42
- package/lib/net/response.d.ts +1 -1
- package/lib/net/response.js +1 -5
- package/lib/net.d.ts +5 -5
- package/lib/net.js +24 -73
- package/lib/s3.d.ts +1 -1
- package/lib/s3.js +23 -62
- package/lib/scan.d.ts +3 -3
- package/lib/scan.js +10 -50
- package/lib/session.d.ts +3 -3
- package/lib/session.js +9 -46
- package/lib/sql.d.ts +2 -2
- package/lib/sql.js +9 -50
- package/lib/ssh/sftp.js +5 -46
- package/lib/ssh/shell.js +2 -39
- package/lib/ssh.d.ts +2 -2
- package/lib/ssh.js +5 -43
- package/lib/text.d.ts +1 -1
- package/lib/text.js +40 -104
- package/lib/time.d.ts +1 -1
- package/lib/time.js +10 -50
- package/lib/turnstile.d.ts +1 -1
- package/lib/turnstile.js +6 -43
- package/lib/ws.d.ts +10 -2
- package/lib/ws.js +70 -53
- package/lib/zip.d.ts +1 -1
- package/lib/zip.js +10 -57
- package/lib/zlib.js +24 -89
- package/main.js +6 -44
- package/package.json +9 -8
- package/sys/child.js +10 -45
- package/sys/cmd.js +8 -43
- package/sys/ctr.d.ts +5 -5
- package/sys/ctr.js +11 -49
- package/sys/master.js +11 -46
- package/sys/mod.d.ts +9 -5
- package/sys/mod.js +28 -214
- package/sys/route.d.ts +2 -2
- package/sys/route.js +26 -64
- package/types/index.d.ts +1 -0
- package/www/example/ctr/main.d.ts +1 -1
- package/www/example/ctr/main.js +2 -38
- package/www/example/ctr/middle.d.ts +2 -2
- package/www/example/ctr/middle.js +2 -38
- package/www/example/ctr/test.d.ts +2 -2
- package/www/example/ctr/test.js +65 -72
- package/www/example/mod/test.d.ts +2 -2
- package/www/example/mod/test.js +4 -42
- package/www/example/mod/testdata.d.ts +1 -1
- package/www/example/mod/testdata.js +3 -8
- package/www/example/ws/mproxy.d.ts +1 -1
- package/www/example/ws/mproxy.js +6 -41
- package/www/example/ws/rproxy.d.ts +1 -1
- package/www/example/ws/rproxy.js +5 -40
- package/www/example/ws/rsocket.d.ts +4 -0
- package/www/example/ws/rsocket.js +12 -0
- package/www/example/ws/test.d.ts +6 -1
- package/www/example/ws/test.js +13 -42
- package/eslint.config.js +0 -22
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<p align="center"><img src="./doc/icon.
|
|
1
|
+
<p align="center"><img src="./doc/icon.png" width="64" height="64" alt="Kebab"></p>
|
|
2
2
|
<p align="center">
|
|
3
3
|
<a href="https://github.com/maiyun/kebab/blob/master/LICENSE">
|
|
4
4
|
<img alt="License" src="https://img.shields.io/github/license/maiyun/kebab?color=blue" />
|
|
@@ -192,10 +192,6 @@ See: /test/ctr-checkinput
|
|
|
192
192
|
|
|
193
193
|
You can visit /test/ to see more examples.
|
|
194
194
|
|
|
195
|
-
## Changelog
|
|
196
|
-
|
|
197
|
-
[Changelog](./doc/CHANGELOG.md)
|
|
198
|
-
|
|
199
195
|
## License
|
|
200
196
|
|
|
201
197
|
This library is published under [Apache-2.0](./LICENSE) license.
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Project: Kebab, User: JianSuoQiYue
|
|
4
3
|
* Date: 2019-3-30 12:46:41
|
|
@@ -8,26 +7,25 @@
|
|
|
8
7
|
* --- npx tsc-alias -w ---
|
|
9
8
|
* ------------------------
|
|
10
9
|
*/
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MOD_CWD = exports.FTMP_CWD = exports.IND_CWD = exports.WWW_CWD = exports.LOG_CWD = exports.LIB_CWD = exports.VHOST_CWD = exports.CERT_CWD = exports.CONF_CWD = exports.ROOT_CWD = exports.SYS_PATH = exports.LIB_PATH = exports.ROOT_PATH = exports.VER = void 0;
|
|
13
10
|
/** --- 当前系统版本号 --- */
|
|
14
|
-
|
|
11
|
+
export const VER = '3.0.0';
|
|
15
12
|
// --- 服务端用的路径 ---
|
|
13
|
+
const imu = import.meta.url.replace('file://', '').replace(/^\/(\w:)/, '$1').replace(/\\/g, '/');
|
|
16
14
|
/** --- /xxx/xxx --- */
|
|
17
|
-
const dirname =
|
|
15
|
+
const dirname = imu.slice(0, imu.lastIndexOf('/'));
|
|
18
16
|
/** --- 框架根目录,以 / 结尾 --- */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
export const ROOT_PATH = dirname + '/';
|
|
18
|
+
export const LIB_PATH = ROOT_PATH + 'lib/';
|
|
19
|
+
export const SYS_PATH = ROOT_PATH + 'sys/';
|
|
22
20
|
const cwd = process.cwd().replace(/\\/g, '/');
|
|
23
21
|
/** --- 执行根目录,以 / 结尾 --- */
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
export const ROOT_CWD = cwd + '/';
|
|
23
|
+
export const CONF_CWD = ROOT_CWD + 'conf/';
|
|
24
|
+
export const CERT_CWD = CONF_CWD + 'cert/';
|
|
25
|
+
export const VHOST_CWD = CONF_CWD + 'vhost/';
|
|
26
|
+
export const LIB_CWD = ROOT_CWD + 'lib/';
|
|
27
|
+
export const LOG_CWD = ROOT_CWD + 'log/';
|
|
28
|
+
export const WWW_CWD = ROOT_CWD + 'www/';
|
|
29
|
+
export const IND_CWD = ROOT_CWD + 'ind/';
|
|
30
|
+
export const FTMP_CWD = ROOT_CWD + 'ftmp/';
|
|
31
|
+
export const MOD_CWD = ROOT_CWD + 'mod/';
|
package/lib/buffer.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Writer = exports.Reader = void 0;
|
|
4
|
-
exports.getReader = getReader;
|
|
5
|
-
exports.getWriter = getWriter;
|
|
6
1
|
/** --- 读对象 --- */
|
|
7
|
-
class Reader {
|
|
2
|
+
export class Reader {
|
|
8
3
|
constructor(buffer) {
|
|
9
4
|
/** --- 当前读取位置 --- */
|
|
10
5
|
this._offset = 0;
|
|
@@ -30,9 +25,7 @@ class Reader {
|
|
|
30
25
|
}
|
|
31
26
|
/** --- 读取一个 BCD 编码的字符串(每个字节表示两个数字)--- */
|
|
32
27
|
readBCDString(length) {
|
|
33
|
-
|
|
34
|
-
length = this._buffer.length - this._offset;
|
|
35
|
-
}
|
|
28
|
+
length ??= this._buffer.length - this._offset;
|
|
36
29
|
let str = '';
|
|
37
30
|
for (let i = 0; i < length; i++) {
|
|
38
31
|
const byte = this._buffer.readUInt8(this._offset + i);
|
|
@@ -44,9 +37,7 @@ class Reader {
|
|
|
44
37
|
}
|
|
45
38
|
/** --- 读取普通 string --- */
|
|
46
39
|
readString(length, encoding = 'utf8') {
|
|
47
|
-
|
|
48
|
-
length = this._buffer.length - this._offset;
|
|
49
|
-
}
|
|
40
|
+
length ??= this._buffer.length - this._offset;
|
|
50
41
|
const buf = [];
|
|
51
42
|
for (let i = 0; i < length; i++) {
|
|
52
43
|
const byte = this._buffer.readUInt8(this._offset + i);
|
|
@@ -60,9 +51,7 @@ class Reader {
|
|
|
60
51
|
}
|
|
61
52
|
/** --- 读取 Buffer --- */
|
|
62
53
|
readBuffer(length) {
|
|
63
|
-
|
|
64
|
-
length = this._buffer.length - this._offset;
|
|
65
|
-
}
|
|
54
|
+
length ??= this._buffer.length - this._offset;
|
|
66
55
|
return this._buffer.subarray(this._offset, this._offset += length);
|
|
67
56
|
}
|
|
68
57
|
/** --- 获取完整的 buffer 长度 --- */
|
|
@@ -70,9 +59,8 @@ class Reader {
|
|
|
70
59
|
return this._buffer.length;
|
|
71
60
|
}
|
|
72
61
|
}
|
|
73
|
-
exports.Reader = Reader;
|
|
74
62
|
/** --- 写对象 --- */
|
|
75
|
-
class Writer {
|
|
63
|
+
export class Writer {
|
|
76
64
|
constructor(size) {
|
|
77
65
|
/** --- 当前读取位置 --- */
|
|
78
66
|
this._offset = 0;
|
|
@@ -116,18 +104,17 @@ class Writer {
|
|
|
116
104
|
return this._buffer.subarray(0, this._offset);
|
|
117
105
|
}
|
|
118
106
|
}
|
|
119
|
-
exports.Writer = Writer;
|
|
120
107
|
/**
|
|
121
108
|
* --- Buffer Reader 对象 ---
|
|
122
109
|
* @param buffer 要读取的 buffer
|
|
123
110
|
*/
|
|
124
|
-
function getReader(buffer) {
|
|
111
|
+
export function getReader(buffer) {
|
|
125
112
|
return new Reader(buffer);
|
|
126
113
|
}
|
|
127
114
|
/**
|
|
128
115
|
* --- Buffer Writer 对象 ---
|
|
129
116
|
* @param buffer 要读取的 buffer
|
|
130
117
|
*/
|
|
131
|
-
function getWriter(size) {
|
|
118
|
+
export function getWriter(size) {
|
|
132
119
|
return new Writer(size);
|
|
133
120
|
}
|
package/lib/captcha.js
CHANGED
|
@@ -1,51 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.Captcha = void 0;
|
|
37
|
-
exports.get = get;
|
|
38
1
|
/**
|
|
39
2
|
* Project: Kebab, User: JianSuoQiYue
|
|
40
3
|
* Date: 2019-6-7 12:14:31
|
|
41
4
|
* Last: 2020-3-11 23:33:19, 2022-09-12 10:38:24, 2022-12-29 01:16:26, 2024-4-1 16:40:42, 2025-6-13 19:45:30
|
|
42
5
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
6
|
+
import * as svgCaptcha from 'svg-captcha';
|
|
7
|
+
import * as mime from '@litert/mime';
|
|
8
|
+
import * as core from '../lib/core.js';
|
|
9
|
+
import * as kebab from '../index.js';
|
|
47
10
|
svgCaptcha.loadFont(kebab.LIB_PATH + 'captcha/zcool-addict-italic.ttf');
|
|
48
|
-
class Captcha {
|
|
11
|
+
export class Captcha {
|
|
49
12
|
constructor(opt) {
|
|
50
13
|
this._link = svgCaptcha.create({
|
|
51
14
|
'width': opt.width,
|
|
@@ -75,14 +38,13 @@ class Captcha {
|
|
|
75
38
|
return this._link.text;
|
|
76
39
|
}
|
|
77
40
|
}
|
|
78
|
-
exports.Captcha = Captcha;
|
|
79
41
|
/**
|
|
80
42
|
* --- 获取验证码对象 ---
|
|
81
43
|
* @param width 宽度
|
|
82
44
|
* @param height 高度
|
|
83
45
|
* @param length 字符个数
|
|
84
46
|
*/
|
|
85
|
-
function get(width, height, length = 4) {
|
|
47
|
+
export function get(width, height, length = 4) {
|
|
86
48
|
return new Captcha({
|
|
87
49
|
'width': width,
|
|
88
50
|
'height': height,
|
package/lib/consistent.js
CHANGED
|
@@ -1,52 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.Consistent = void 0;
|
|
37
|
-
exports.get = get;
|
|
38
|
-
exports.fast = fast;
|
|
39
|
-
exports.hash = hash;
|
|
40
|
-
exports.getRange = getRange;
|
|
41
|
-
exports.addToCircle = addToCircle;
|
|
42
|
-
exports.findInCircle = findInCircle;
|
|
43
1
|
/**
|
|
44
2
|
* Project: Kebab, User: JianSuoQiYue
|
|
45
3
|
* Date: 2022-09-12 10:51:16
|
|
46
4
|
* Last: 2022-09-12 10:51:20, 2023-3-17 10:52:04, 2023-11-15 11:45:28
|
|
47
5
|
*/
|
|
48
|
-
|
|
49
|
-
class Consistent {
|
|
6
|
+
import * as crypto from '../lib/crypto.js';
|
|
7
|
+
export class Consistent {
|
|
50
8
|
constructor(vcount) {
|
|
51
9
|
/** --- 虚拟节点数量 --- */
|
|
52
10
|
this._vcount = 300;
|
|
@@ -135,8 +93,7 @@ class Consistent {
|
|
|
135
93
|
return rtn;
|
|
136
94
|
}
|
|
137
95
|
}
|
|
138
|
-
|
|
139
|
-
function get(vcount = 300) {
|
|
96
|
+
export function get(vcount = 300) {
|
|
140
97
|
return new Consistent(vcount);
|
|
141
98
|
}
|
|
142
99
|
/**
|
|
@@ -145,7 +102,7 @@ function get(vcount = 300) {
|
|
|
145
102
|
* @param nodes node 列表
|
|
146
103
|
* @param vcount 虚拟节点数量
|
|
147
104
|
*/
|
|
148
|
-
function fast(key, nodes, vcount = 300) {
|
|
105
|
+
export function fast(key, nodes, vcount = 300) {
|
|
149
106
|
const circle = {};
|
|
150
107
|
addToCircle(circle, nodes, vcount);
|
|
151
108
|
return findInCircle(circle, key);
|
|
@@ -154,7 +111,7 @@ function fast(key, nodes, vcount = 300) {
|
|
|
154
111
|
* --- hash 函数 ---
|
|
155
112
|
* @param val 要 hash 的值
|
|
156
113
|
*/
|
|
157
|
-
function hash(val) {
|
|
114
|
+
export function hash(val) {
|
|
158
115
|
if (typeof val === 'number') {
|
|
159
116
|
val = val.toString();
|
|
160
117
|
}
|
|
@@ -171,7 +128,7 @@ function hash(val) {
|
|
|
171
128
|
* @param max 最大值(含)
|
|
172
129
|
* @param pre 前导
|
|
173
130
|
*/
|
|
174
|
-
function getRange(min, max, pre = '') {
|
|
131
|
+
export function getRange(min, max, pre = '') {
|
|
175
132
|
const ls = [];
|
|
176
133
|
for (let i = min; i <= max; ++i) {
|
|
177
134
|
ls.push(pre + i.toString());
|
|
@@ -184,7 +141,7 @@ function getRange(min, max, pre = '') {
|
|
|
184
141
|
* @param node node 节点名一个或多个
|
|
185
142
|
* @param vcount 虚拟节点数量
|
|
186
143
|
*/
|
|
187
|
-
function addToCircle(circle, node, vcount = 300) {
|
|
144
|
+
export function addToCircle(circle, node, vcount = 300) {
|
|
188
145
|
if (typeof node === 'string') {
|
|
189
146
|
node = [node];
|
|
190
147
|
}
|
|
@@ -200,7 +157,7 @@ function addToCircle(circle, node, vcount = 300) {
|
|
|
200
157
|
* @param key 为给定键取 Hash,取得顺时针方向上最近的一个虚拟节点对应的实际节点
|
|
201
158
|
* @param keys keys,留空则自动从 circle 上取
|
|
202
159
|
*/
|
|
203
|
-
function findInCircle(circle, key, keys = []) {
|
|
160
|
+
export function findInCircle(circle, key, keys = []) {
|
|
204
161
|
let count = keys.length;
|
|
205
162
|
if (keys.length === 0) {
|
|
206
163
|
keys = Object.keys(circle);
|
package/lib/core.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as http from 'http';
|
|
2
2
|
import * as http2 from 'http2';
|
|
3
3
|
import * as stream from 'stream';
|
|
4
|
-
import * as lResponse from '
|
|
5
|
-
import * as sCtr from '
|
|
6
|
-
import * as types from '
|
|
4
|
+
import * as lResponse from '../lib/net/response.js';
|
|
5
|
+
import * as sCtr from '../sys/ctr.js';
|
|
6
|
+
import * as types from '../types/index.js';
|
|
7
7
|
/** --- 全局参数 --- */
|
|
8
8
|
export declare const globalConfig: types.IConfig & {
|
|
9
9
|
'httpPort': number;
|
|
@@ -228,7 +228,7 @@ export declare function ls(opt: {
|
|
|
228
228
|
* --- 完整的克隆一份数组/对象,Kebab: yes, Mutton: no ---
|
|
229
229
|
* @param obj 要克隆的对象
|
|
230
230
|
*/
|
|
231
|
-
export declare function clone(obj:
|
|
231
|
+
export declare function clone<T>(obj: T): T;
|
|
232
232
|
/**
|
|
233
233
|
* --- 打印调试信息,线上环境不会打印 ---
|
|
234
234
|
* @param message 参数
|