@maiyunnet/kebab 3.0.3 → 3.1.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/README.md +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/lib/captcha.js +2 -2
- package/lib/consistent.js +1 -1
- package/lib/core.d.ts +3 -3
- package/lib/core.js +29 -13
- package/lib/cron.d.ts +40 -0
- package/lib/cron.js +126 -0
- package/lib/crypto.js +2 -2
- package/lib/db.d.ts +4 -3
- package/lib/db.js +27 -15
- package/lib/dns.d.ts +1 -1
- package/lib/dns.js +7 -7
- package/lib/jwt.d.ts +3 -3
- package/lib/jwt.js +4 -4
- package/lib/kv.d.ts +4 -3
- package/lib/kv.js +21 -9
- package/lib/lan.js +1 -1
- package/lib/net/formdata.js +2 -2
- package/lib/net/request.d.ts +1 -1
- package/lib/net/request.js +2 -2
- package/lib/net/response.d.ts +1 -1
- package/lib/net.d.ts +2 -2
- package/lib/net.js +4 -4
- package/lib/s3.d.ts +1 -1
- package/lib/s3.js +2 -2
- package/lib/scan.d.ts +3 -3
- package/lib/scan.js +6 -6
- package/lib/session.d.ts +3 -3
- package/lib/session.js +6 -6
- package/lib/sql.d.ts +2 -2
- package/lib/sql.js +3 -3
- package/lib/ssh/sftp.js +2 -2
- package/lib/ssh/shell.js +1 -1
- package/lib/text.d.ts +2 -2
- package/lib/text.js +1 -1
- package/lib/time.d.ts +1 -1
- package/lib/time.js +1 -1
- package/lib/turnstile.d.ts +1 -1
- package/lib/turnstile.js +2 -2
- package/lib/ws.d.ts +2 -2
- package/lib/ws.js +2 -2
- package/lib/zip.d.ts +1 -1
- package/lib/zip.js +1 -1
- package/package.json +9 -6
- package/sys/child.js +6 -6
- package/sys/cmd.js +6 -6
- package/sys/master.js +8 -8
- package/sys/mod.d.ts +5 -5
- package/sys/mod.js +39 -16
- package/sys/route.d.ts +1 -1
- package/sys/route.js +11 -11
- package/www/example/ctr/main.d.ts +1 -1
- package/www/example/ctr/main.js +1 -1
- package/www/example/ctr/middle.d.ts +2 -2
- package/www/example/ctr/middle.js +1 -1
- package/www/example/ctr/test.d.ts +4 -2
- package/www/example/ctr/test.js +125 -42
- package/www/example/mod/test.d.ts +2 -2
- package/www/example/mod/test.js +2 -2
- package/www/example/mod/testdata.d.ts +1 -1
- package/www/example/mod/testdata.js +1 -1
- package/www/example/view/test.ejs +2 -1
- package/www/example/ws/mproxy.d.ts +1 -1
- package/www/example/ws/mproxy.js +3 -3
- package/www/example/ws/rproxy.d.ts +1 -1
- package/www/example/ws/rproxy.js +3 -3
- package/www/example/ws/rsocket.d.ts +1 -1
- package/www/example/ws/rsocket.js +3 -3
- package/www/example/ws/test.d.ts +1 -1
- package/www/example/ws/test.js +3 -3
package/lib/net.js
CHANGED
|
@@ -8,10 +8,10 @@ import * as stream from 'stream';
|
|
|
8
8
|
// --- 第三方 ---
|
|
9
9
|
import * as hc from '@litert/http-client';
|
|
10
10
|
// --- 库和定义 ---
|
|
11
|
-
import * as fs from '
|
|
12
|
-
import * as text from '
|
|
13
|
-
import * as time from '
|
|
14
|
-
import * as kebab from '
|
|
11
|
+
import * as fs from '#lib/fs.js';
|
|
12
|
+
import * as text from '#lib/text.js';
|
|
13
|
+
import * as time from '#lib/time.js';
|
|
14
|
+
import * as kebab from '#index.js';
|
|
15
15
|
// --- 自己 ---
|
|
16
16
|
import * as fd from './net/formdata.js';
|
|
17
17
|
import * as lRequest from './net/request.js';
|
package/lib/s3.d.ts
CHANGED
package/lib/s3.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
// --- 库和定义 ---
|
|
7
7
|
import * as s3 from '@aws-sdk/client-s3';
|
|
8
8
|
import * as ls from '@aws-sdk/lib-storage';
|
|
9
|
-
import * as lCore from '
|
|
10
|
-
import * as lText from '
|
|
9
|
+
import * as lCore from '#lib/core.js';
|
|
10
|
+
import * as lText from '#lib/text.js';
|
|
11
11
|
/**
|
|
12
12
|
* s3 文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/
|
|
13
13
|
*/
|
package/lib/scan.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Date: 2022-09-24 15:23:25
|
|
4
4
|
* Last: 2022-09-24 15:23:25, 2022-9-26 12:37:01, 2022-12-29 00:11:16
|
|
5
5
|
*/
|
|
6
|
-
import * as lDb from '
|
|
7
|
-
import * as lKv from '
|
|
8
|
-
import * as sCtr from '
|
|
6
|
+
import * as lDb from '#lib/db.js';
|
|
7
|
+
import * as lKv from '#lib/kv.js';
|
|
8
|
+
import * as sCtr from '#sys/ctr.js';
|
|
9
9
|
/** --- Scan 设置的选项 --- */
|
|
10
10
|
export interface IOptions {
|
|
11
11
|
'ttl'?: number;
|
package/lib/scan.js
CHANGED
|
@@ -17,12 +17,12 @@ CREATE TABLE IF NOT EXISTS `scan` (
|
|
|
17
17
|
KEY `time_exp` (`time_exp`)
|
|
18
18
|
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
19
19
|
*/
|
|
20
|
-
import * as lCore from '
|
|
21
|
-
import * as lDb from '
|
|
22
|
-
import * as lKv from '
|
|
23
|
-
import * as lSql from '
|
|
24
|
-
import * as lTime from '
|
|
25
|
-
import * as lText from '
|
|
20
|
+
import * as lCore from '#lib/core.js';
|
|
21
|
+
import * as lDb from '#lib/db.js';
|
|
22
|
+
import * as lKv from '#lib/kv.js';
|
|
23
|
+
import * as lSql from '#lib/sql.js';
|
|
24
|
+
import * as lTime from '#lib/time.js';
|
|
25
|
+
import * as lText from '#lib/text.js';
|
|
26
26
|
export class Scan {
|
|
27
27
|
constructor(link, token, opt = {}) {
|
|
28
28
|
this._sql = null;
|
package/lib/session.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Date: 2019-6-5 22:01:40
|
|
4
4
|
* Last: 2020-3-30 00:11:15, 2022-12-29 00:10:28, 2023-5-24 18:59:27
|
|
5
5
|
*/
|
|
6
|
-
import * as db from '
|
|
7
|
-
import * as kv from '
|
|
8
|
-
import * as ctr from '
|
|
6
|
+
import * as db from '#lib/db.js';
|
|
7
|
+
import * as kv from '#lib/kv.js';
|
|
8
|
+
import * as ctr from '#sys/ctr.js';
|
|
9
9
|
export interface IOptions {
|
|
10
10
|
'name'?: string;
|
|
11
11
|
'ttl'?: number;
|
package/lib/session.js
CHANGED
|
@@ -17,12 +17,12 @@ CREATE TABLE `session` (
|
|
|
17
17
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
18
18
|
*/
|
|
19
19
|
// --- 库和定义 ---
|
|
20
|
-
import * as core from '
|
|
21
|
-
import * as time from '
|
|
22
|
-
import * as db from '
|
|
23
|
-
import * as kv from '
|
|
24
|
-
import * as sql from '
|
|
25
|
-
import * as text from '
|
|
20
|
+
import * as core from '#lib/core.js';
|
|
21
|
+
import * as time from '#lib/time.js';
|
|
22
|
+
import * as db from '#lib/db.js';
|
|
23
|
+
import * as kv from '#lib/kv.js';
|
|
24
|
+
import * as sql from '#lib/sql.js';
|
|
25
|
+
import * as text from '#lib/text.js';
|
|
26
26
|
export class Session {
|
|
27
27
|
constructor() {
|
|
28
28
|
/** --- 当前 Session 的 token --- */
|
package/lib/sql.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Date: 2019-5-27 20:18:50
|
|
4
4
|
* Last: 2020-3-29 19:37:25, 2022-07-24 22:38:11, 2023-5-24 18:49:18, 2023-6-13 22:20:21, 2023-12-11 13:58:54, 2023-12-14 13:14:40, 2023-12-21 00:04:40, 2024-4-11 19:29:29, 2024-9-2 17:15:28, 2025-8-3 21:28:18
|
|
5
5
|
*/
|
|
6
|
-
import * as ctr from '
|
|
7
|
-
import * as types from '
|
|
6
|
+
import * as ctr from '#sys/ctr.js';
|
|
7
|
+
import * as types from '#types/index.js';
|
|
8
8
|
export declare class Sql {
|
|
9
9
|
/** --- 前置 --- */
|
|
10
10
|
private readonly _pre;
|
package/lib/sql.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Date: 2019-5-27 20:18:50
|
|
4
4
|
* Last: 2020-3-29 19:37:25, 2022-07-24 22:38:11, 2023-5-24 18:49:18, 2023-6-13 22:20:21, 2023-12-11 13:58:54, 2023-12-14 13:14:40, 2023-12-21 00:04:40, 2024-4-11 19:29:29, 2024-9-2 17:15:28, 2025-8-3 21:28:18
|
|
5
5
|
*/
|
|
6
|
-
import * as lText from '
|
|
7
|
-
import * as lCore from '
|
|
6
|
+
import * as lText from '#lib/text.js';
|
|
7
|
+
import * as lCore from '#lib/core.js';
|
|
8
8
|
// --- 第三方 ---
|
|
9
9
|
import * as mysql2 from 'mysql2/promise';
|
|
10
10
|
// --- 库和定义 ---
|
|
11
|
-
import * as ctr from '
|
|
11
|
+
import * as ctr from '#sys/ctr.js';
|
|
12
12
|
/** --- filed 用 token --- */
|
|
13
13
|
let columnToken = '';
|
|
14
14
|
export class Sql {
|
package/lib/ssh/sftp.js
CHANGED
package/lib/ssh/shell.js
CHANGED
package/lib/text.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as types from '
|
|
1
|
+
import * as types from '#types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* --- 将文件大小格式化为带单位的字符串 ---
|
|
4
4
|
* @param size 文件大小
|
|
@@ -143,7 +143,7 @@ export declare function isFalsy(val: any): val is TFalsy;
|
|
|
143
143
|
* --- 判断一个值是否是真实的(不为 null/undefined/空字符串/false/0) ---
|
|
144
144
|
* @param val 要判断的值
|
|
145
145
|
*/
|
|
146
|
-
export declare function isTruthy(val:
|
|
146
|
+
export declare function isTruthy<T>(val: T): val is Exclude<T, TFalsy>;
|
|
147
147
|
/**
|
|
148
148
|
* --- 类似 || 运算符的效果 ---
|
|
149
149
|
* @param v1 比对值
|
package/lib/text.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Date: 2019-5-15 16:49:39
|
|
4
4
|
* Last: 2020-04-06 20:51:06, 2022-9-29 15:18:16, 2022-12-29 00:01:30, 2024-3-6 17:53:14, 2024-5-31 17:29:52, 2025-6-13 15:47:02
|
|
5
5
|
*/
|
|
6
|
-
import * as kebab from '
|
|
6
|
+
import * as kebab from '#index.js';
|
|
7
7
|
import * as fs from './fs.js';
|
|
8
8
|
/**
|
|
9
9
|
* --- 将文件大小格式化为带单位的字符串 ---
|
package/lib/time.d.ts
CHANGED
package/lib/time.js
CHANGED
package/lib/turnstile.d.ts
CHANGED
package/lib/turnstile.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as tc from 'tencentcloud-sdk-nodejs';
|
|
7
7
|
// --- 库和定义 ---
|
|
8
|
-
import * as lNet from '
|
|
9
|
-
import * as lText from '
|
|
8
|
+
import * as lNet from '#lib/net.js';
|
|
9
|
+
import * as lText from '#lib/text.js';
|
|
10
10
|
/**
|
|
11
11
|
* 0. CloudFlare:https://developers.cloudflare.com/turnstile/get-started/server-side-validation/
|
|
12
12
|
* 1. 腾讯云:https://cloud.tencent.com/document/product/1110/36926
|
package/lib/ws.d.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as http from 'http';
|
|
7
7
|
import * as net from 'net';
|
|
8
|
-
import * as types from '
|
|
9
|
-
import * as sCtr from '
|
|
8
|
+
import * as types from '#types/index.js';
|
|
9
|
+
import * as sCtr from '#sys/ctr.js';
|
|
10
10
|
/** --- 一般用 SIMPLE --- */
|
|
11
11
|
export declare enum EFrameReceiveMode {
|
|
12
12
|
STANDARD = 0,
|
package/lib/ws.js
CHANGED
|
@@ -2,8 +2,8 @@ import * as net from 'net';
|
|
|
2
2
|
// --- 第三方 ---
|
|
3
3
|
import * as liws from '@litert/websocket';
|
|
4
4
|
// --- 库 ---
|
|
5
|
-
import * as lText from '
|
|
6
|
-
import * as lNet from '
|
|
5
|
+
import * as lText from '#lib/text.js';
|
|
6
|
+
import * as lNet from '#lib/net.js';
|
|
7
7
|
/** --- 一般用 SIMPLE --- */
|
|
8
8
|
export var EFrameReceiveMode;
|
|
9
9
|
(function (EFrameReceiveMode) {
|
package/lib/zip.d.ts
CHANGED
package/lib/zip.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maiyunnet/kebab",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Simple, easy-to-use, and fully-featured Node.js framework that is ready-to-use out of the box.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -14,9 +14,12 @@
|
|
|
14
14
|
"bin": {
|
|
15
15
|
"kebab": "./bin/kebab.js"
|
|
16
16
|
},
|
|
17
|
+
"imports": {
|
|
18
|
+
"#*": "./*"
|
|
19
|
+
},
|
|
17
20
|
"dependencies": {
|
|
18
|
-
"@aws-sdk/client-s3": "^3.
|
|
19
|
-
"@aws-sdk/lib-storage": "^3.
|
|
21
|
+
"@aws-sdk/client-s3": "^3.891.0",
|
|
22
|
+
"@aws-sdk/lib-storage": "^3.891.0",
|
|
20
23
|
"@litert/http-client": "^1.1.2",
|
|
21
24
|
"@litert/mime": "^0.1.3",
|
|
22
25
|
"@litert/redis": "^3.0.5",
|
|
@@ -24,15 +27,15 @@
|
|
|
24
27
|
"@types/ssh2": "^1.15.5",
|
|
25
28
|
"ejs": "^3.1.10",
|
|
26
29
|
"jszip": "^3.10.1",
|
|
27
|
-
"mysql2": "^3.
|
|
30
|
+
"mysql2": "^3.15.0",
|
|
28
31
|
"ssh2": "^1.17.0",
|
|
29
32
|
"svg-captcha": "^1.4.0",
|
|
30
|
-
"tencentcloud-sdk-nodejs": "^4.1.
|
|
33
|
+
"tencentcloud-sdk-nodejs": "^4.1.118"
|
|
31
34
|
},
|
|
32
35
|
"devDependencies": {
|
|
33
36
|
"@litert/eslint-plugin-rules": "^0.3.1",
|
|
34
37
|
"@types/ejs": "^3.1.5",
|
|
35
|
-
"@types/node": "^24.5.
|
|
38
|
+
"@types/node": "^24.5.2",
|
|
36
39
|
"tsc-alias": "^1.8.16",
|
|
37
40
|
"typescript": "^5.9.2"
|
|
38
41
|
}
|
package/sys/child.js
CHANGED
|
@@ -8,13 +8,13 @@ import * as tls from 'tls';
|
|
|
8
8
|
import * as http from 'http';
|
|
9
9
|
import * as crypto from 'crypto';
|
|
10
10
|
// --- 库和定义 ---
|
|
11
|
-
import * as fs from '
|
|
12
|
-
import * as lCore from '
|
|
13
|
-
import * as lText from '
|
|
14
|
-
import * as sCtr from '
|
|
15
|
-
import * as kebab from '
|
|
11
|
+
import * as fs from '#lib/fs.js';
|
|
12
|
+
import * as lCore from '#lib/core.js';
|
|
13
|
+
import * as lText from '#lib/text.js';
|
|
14
|
+
import * as sCtr from '#sys/ctr.js';
|
|
15
|
+
import * as kebab from '#index.js';
|
|
16
16
|
// --- 初始化 ---
|
|
17
|
-
import * as sRoute from '
|
|
17
|
+
import * as sRoute from '#sys/route.js';
|
|
18
18
|
/** --- 10 秒往主线程发送一次心跳的 Timer --- */
|
|
19
19
|
const hbTimer = setInterval(function () {
|
|
20
20
|
if (!process.connected || !process.send) {
|
package/sys/cmd.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* Last: 2020-3-7 23:51:18, 2022-07-22 14:14:09, 2022-9-27 14:52:19, 2023-5-23 21:42:46, 2024-7-2 15:12:28
|
|
5
5
|
*/
|
|
6
6
|
import * as http from 'http';
|
|
7
|
-
import * as lFs from '
|
|
8
|
-
import * as lText from '
|
|
9
|
-
import * as lTime from '
|
|
10
|
-
import * as lCore from '
|
|
11
|
-
import * as lCrypto from '
|
|
12
|
-
import * as kebab from '
|
|
7
|
+
import * as lFs from '#lib/fs.js';
|
|
8
|
+
import * as lText from '#lib/text.js';
|
|
9
|
+
import * as lTime from '#lib/time.js';
|
|
10
|
+
import * as lCore from '#lib/core.js';
|
|
11
|
+
import * as lCrypto from '#lib/crypto.js';
|
|
12
|
+
import * as kebab from '#index.js';
|
|
13
13
|
/** --- 解析命令 --- */
|
|
14
14
|
const cmds = process.argv.slice(2);
|
|
15
15
|
/** --- 批量创建目录 --- */
|
package/sys/master.js
CHANGED
|
@@ -7,14 +7,14 @@ import * as os from 'os';
|
|
|
7
7
|
import * as cluster from 'cluster';
|
|
8
8
|
import * as http from 'http';
|
|
9
9
|
// --- 库和定义 ---
|
|
10
|
-
import * as kebab from '
|
|
11
|
-
import * as sRoute from '
|
|
12
|
-
import * as lCore from '
|
|
13
|
-
import * as lFs from '
|
|
14
|
-
import * as lText from '
|
|
15
|
-
import * as lCrypto from '
|
|
16
|
-
import * as lTime from '
|
|
17
|
-
import * as lZip from '
|
|
10
|
+
import * as kebab from '#index.js';
|
|
11
|
+
import * as sRoute from '#sys/route.js';
|
|
12
|
+
import * as lCore from '#lib/core.js';
|
|
13
|
+
import * as lFs from '#lib/fs.js';
|
|
14
|
+
import * as lText from '#lib/text.js';
|
|
15
|
+
import * as lCrypto from '#lib/crypto.js';
|
|
16
|
+
import * as lTime from '#lib/time.js';
|
|
17
|
+
import * as lZip from '#lib/zip.js';
|
|
18
18
|
/** --- 当前运行中的子进程列表 --- */
|
|
19
19
|
const workerList = {};
|
|
20
20
|
/**
|
package/sys/mod.d.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Date: 2019-6-4 21:35
|
|
4
4
|
* Last: 2020-4-14 13:33:51, 2022-07-23 16:01:34, 2022-09-06 22:59:26, 2023-5-24 19:11:37, 2023-6-13 21:47:58, 2023-7-10 18:54:03, 2023-8-23 17:03:16, 2023-12-11 15:21:22, 2023-12-20 23:12:03, 2024-3-8 16:05:29, 2024-3-20 19:58:15, 2024-8-11 21:14:54, 2024-10-5 14:00:22, 2024-12-14 19:58:34
|
|
5
5
|
*/
|
|
6
|
-
import * as lSql from '
|
|
7
|
-
import * as lDb from '
|
|
8
|
-
import * as sCtr from '
|
|
9
|
-
import * as types from '
|
|
6
|
+
import * as lSql from '#lib/sql.js';
|
|
7
|
+
import * as lDb from '#lib/db.js';
|
|
8
|
+
import * as sCtr from '#sys/ctr.js';
|
|
9
|
+
import * as types from '#types/index.js';
|
|
10
10
|
/** --- 只获取变量 --- */
|
|
11
11
|
type TOnlyProperties<T> = {
|
|
12
12
|
[K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: T[K];
|
|
@@ -87,7 +87,7 @@ export default class Mod {
|
|
|
87
87
|
'value': string;
|
|
88
88
|
};
|
|
89
89
|
/**
|
|
90
|
-
* ---
|
|
90
|
+
* --- 添加一个序列(允许超过 65536 的占位符会被拆分多次执行) ---
|
|
91
91
|
* @param db 数据库对象
|
|
92
92
|
* @param cs 字段列表
|
|
93
93
|
* @param vs 数据列表
|
package/sys/mod.js
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Date: 2019-6-4 21:35
|
|
4
4
|
* Last: 2020-4-14 13:33:51, 2022-07-23 16:01:34, 2022-09-06 22:59:26, 2023-5-24 19:11:37, 2023-6-13 21:47:58, 2023-7-10 18:54:03, 2023-8-23 17:03:16, 2023-12-11 15:21:22, 2023-12-20 23:12:03, 2024-3-8 16:05:29, 2024-3-20 19:58:15, 2024-8-11 21:14:54, 2024-10-5 14:00:22, 2024-12-14 19:58:34
|
|
5
5
|
*/
|
|
6
|
-
import * as lSql from '
|
|
7
|
-
import * as lTime from '
|
|
8
|
-
import * as lCore from '
|
|
9
|
-
import * as lText from '
|
|
10
|
-
import * as sCtr from '
|
|
6
|
+
import * as lSql from '#lib/sql.js';
|
|
7
|
+
import * as lTime from '#lib/time.js';
|
|
8
|
+
import * as lCore from '#lib/core.js';
|
|
9
|
+
import * as lText from '#lib/text.js';
|
|
10
|
+
import * as sCtr from '#sys/ctr.js';
|
|
11
11
|
/** --- 条数列表 --- */
|
|
12
12
|
class Rows {
|
|
13
13
|
constructor(initialItems = []) {
|
|
@@ -143,7 +143,7 @@ class Mod {
|
|
|
143
143
|
return lSql.column(field);
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
|
-
* ---
|
|
146
|
+
* --- 添加一个序列(允许超过 65536 的占位符会被拆分多次执行) ---
|
|
147
147
|
* @param db 数据库对象
|
|
148
148
|
* @param cs 字段列表
|
|
149
149
|
* @param vs 数据列表
|
|
@@ -151,18 +151,41 @@ class Mod {
|
|
|
151
151
|
*/
|
|
152
152
|
static async insert(db, cs, vs, opt = {}) {
|
|
153
153
|
const sq = lSql.get(opt.pre);
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
154
|
+
if (!vs) {
|
|
155
|
+
// --- 单行 ---
|
|
156
|
+
sq.insert(this._$table + (opt.index ? ('_' + opt.index) : ''));
|
|
157
|
+
sq.values(cs);
|
|
158
|
+
const r = await db.execute(sq.getSql(), sq.getData());
|
|
159
|
+
if (r.packet === null) {
|
|
160
|
+
lCore.log(opt.pre instanceof sCtr.Ctr ? opt.pre : {}, '[insert, mod] ' + lText.stringifyJson(r.error?.message ?? '').slice(1, -1), '-error');
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
return r.packet.affectedRows > 0 ? true : null;
|
|
164
|
+
}
|
|
165
|
+
// --- 可能是多行 ---
|
|
166
|
+
if (vs.some(item => !Array.isArray(item))) {
|
|
167
|
+
vs = [vs];
|
|
168
|
+
}
|
|
169
|
+
/** --- 每条数据的列数 --- */
|
|
170
|
+
const len = vs[0].length;
|
|
171
|
+
/** --- 每批次最多能容纳的行数 --- */
|
|
172
|
+
const line = Math.floor(65535 / len);
|
|
173
|
+
/** --- 总批次数量 --- */
|
|
174
|
+
const batch = Math.ceil(vs.length / line);
|
|
175
|
+
for (let i = 0; i < batch; ++i) {
|
|
176
|
+
sq.insert(this._$table + (opt.index ? ('_' + opt.index) : ''));
|
|
177
|
+
sq.values(cs, vs.slice(i * line, (i + 1) * line));
|
|
178
|
+
const r = await db.execute(sq.getSql(), sq.getData());
|
|
179
|
+
if (r.packet === null) {
|
|
180
|
+
lCore.log(opt.pre instanceof sCtr.Ctr ? opt.pre : {}, '[insert, mod] ' + lText.stringifyJson(r.error?.message ?? '').slice(1, -1), '-error');
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
if (r.packet.affectedRows > 0) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
164
186
|
return null;
|
|
165
187
|
}
|
|
188
|
+
return true;
|
|
166
189
|
}
|
|
167
190
|
/**
|
|
168
191
|
* --- 获取添加一个序列的模拟 SQL ---
|
package/sys/route.d.ts
CHANGED
package/sys/route.js
CHANGED
|
@@ -8,15 +8,15 @@ import * as stream from 'stream';
|
|
|
8
8
|
// --- 第三方 ---
|
|
9
9
|
import * as ws from '@litert/websocket';
|
|
10
10
|
// --- 库和定义 ---
|
|
11
|
-
import * as lFs from '
|
|
12
|
-
import * as lZlib from '
|
|
13
|
-
import * as lCore from '
|
|
14
|
-
import * as lText from '
|
|
15
|
-
import * as lTime from '
|
|
16
|
-
import * as lResponse from '
|
|
17
|
-
import * as lWs from '
|
|
11
|
+
import * as lFs from '#lib/fs.js';
|
|
12
|
+
import * as lZlib from '#lib/zlib.js';
|
|
13
|
+
import * as lCore from '#lib/core.js';
|
|
14
|
+
import * as lText from '#lib/text.js';
|
|
15
|
+
import * as lTime from '#lib/time.js';
|
|
16
|
+
import * as lResponse from '#lib/net/response.js';
|
|
17
|
+
import * as lWs from '#lib/ws.js';
|
|
18
18
|
import * as sCtr from './ctr.js';
|
|
19
|
-
import * as kebab from '
|
|
19
|
+
import * as kebab from '#index.js';
|
|
20
20
|
/** --- 动态层 kebab.json 缓存(文件路径: 最终合并值) --- */
|
|
21
21
|
let kebabConfigs = {};
|
|
22
22
|
/**
|
|
@@ -110,10 +110,10 @@ export async function run(data) {
|
|
|
110
110
|
'urlStcFull': ''
|
|
111
111
|
};
|
|
112
112
|
config.const.urlStcFull = config.const.urlFull + 'stc/';
|
|
113
|
-
if (
|
|
113
|
+
if (lText.isFalsy(config.set.staticPath)) {
|
|
114
114
|
config.set.staticPath = config.const.urlStc;
|
|
115
115
|
}
|
|
116
|
-
if (
|
|
116
|
+
if (lText.isFalsy(config.set.staticPathFull)) {
|
|
117
117
|
config.set.staticPathFull = config.const.urlStcFull;
|
|
118
118
|
}
|
|
119
119
|
// --- data.path 是安全的,不会是 ../../ 来访问到了外层,已经做过处理 ---
|
|
@@ -246,7 +246,7 @@ export async function run(data) {
|
|
|
246
246
|
let rtn;
|
|
247
247
|
if (data.socket && data.req instanceof http.IncomingMessage) {
|
|
248
248
|
// --- socket 模式,判断真实控制器文件是否存在 ---
|
|
249
|
-
const filePath = config.const.wsPath + pathLeft + '
|
|
249
|
+
const filePath = config.const.wsPath + pathLeft + '';
|
|
250
250
|
if (!await lFs.isFile(filePath)) {
|
|
251
251
|
// --- 指定的控制器不存在 ---
|
|
252
252
|
data.socket?.destroy();
|
package/www/example/ctr/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as ctr from '
|
|
2
|
-
import * as types from '
|
|
1
|
+
import * as ctr from '#sys/ctr.js';
|
|
2
|
+
import * as types from '#types/index.js';
|
|
3
3
|
export default class extends ctr.Ctr {
|
|
4
4
|
onLoad(): string | boolean;
|
|
5
5
|
onUnload(rtn: string | boolean | types.DbValue[]): string | boolean | types.DbValue[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
-
import * as sCtr from '
|
|
3
|
-
import * as types from '
|
|
2
|
+
import * as sCtr from '#sys/ctr.js';
|
|
3
|
+
import * as types from '#types/index.js';
|
|
4
4
|
export default class extends sCtr.Ctr {
|
|
5
5
|
private _internalUrl;
|
|
6
6
|
onLoad(): Array<string | number> | boolean;
|
|
@@ -28,6 +28,7 @@ export default class extends sCtr.Ctr {
|
|
|
28
28
|
modSplit(): Promise<string>;
|
|
29
29
|
modSplit1(): Promise<void>;
|
|
30
30
|
modSplit2(): Promise<types.Json[]>;
|
|
31
|
+
modInsert(): Promise<string>;
|
|
31
32
|
captchaFastbuild(): string;
|
|
32
33
|
captchaBase64(): string;
|
|
33
34
|
coreRandom(): string;
|
|
@@ -91,6 +92,7 @@ export default class extends sCtr.Ctr {
|
|
|
91
92
|
zip(): Promise<string>;
|
|
92
93
|
buffer(): string;
|
|
93
94
|
lan(): Promise<string>;
|
|
95
|
+
cron(): Promise<string>;
|
|
94
96
|
/**
|
|
95
97
|
* --- END ---
|
|
96
98
|
*/
|