@maiyunnet/kebab 3.0.3 → 3.1.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.
Files changed (73) hide show
  1. package/README.md +1 -1
  2. package/bin/kebab.js +1 -1
  3. package/index.d.ts +1 -1
  4. package/index.js +1 -1
  5. package/lib/captcha.js +2 -2
  6. package/lib/consistent.js +1 -1
  7. package/lib/core.d.ts +3 -3
  8. package/lib/core.js +29 -13
  9. package/lib/cron.d.ts +40 -0
  10. package/lib/cron.js +126 -0
  11. package/lib/crypto.js +2 -2
  12. package/lib/db.d.ts +4 -3
  13. package/lib/db.js +27 -15
  14. package/lib/dns.d.ts +1 -1
  15. package/lib/dns.js +7 -7
  16. package/lib/jwt.d.ts +3 -3
  17. package/lib/jwt.js +4 -4
  18. package/lib/kv.d.ts +4 -3
  19. package/lib/kv.js +21 -9
  20. package/lib/lan.js +1 -1
  21. package/lib/net/formdata.js +2 -2
  22. package/lib/net/request.d.ts +1 -1
  23. package/lib/net/request.js +2 -2
  24. package/lib/net/response.d.ts +1 -1
  25. package/lib/net.d.ts +2 -2
  26. package/lib/net.js +4 -4
  27. package/lib/s3.d.ts +1 -1
  28. package/lib/s3.js +2 -2
  29. package/lib/scan.d.ts +3 -3
  30. package/lib/scan.js +6 -6
  31. package/lib/session.d.ts +3 -3
  32. package/lib/session.js +6 -6
  33. package/lib/sql.d.ts +2 -2
  34. package/lib/sql.js +3 -3
  35. package/lib/ssh/sftp.js +2 -2
  36. package/lib/ssh/shell.js +1 -1
  37. package/lib/text.d.ts +2 -2
  38. package/lib/text.js +1 -1
  39. package/lib/time.d.ts +1 -1
  40. package/lib/time.js +1 -1
  41. package/lib/turnstile.d.ts +1 -1
  42. package/lib/turnstile.js +2 -2
  43. package/lib/ws.d.ts +2 -2
  44. package/lib/ws.js +2 -2
  45. package/lib/zip.d.ts +1 -1
  46. package/lib/zip.js +1 -1
  47. package/package.json +9 -6
  48. package/sys/child.js +6 -6
  49. package/sys/cmd.js +6 -6
  50. package/sys/master.js +8 -8
  51. package/sys/mod.d.ts +5 -5
  52. package/sys/mod.js +39 -16
  53. package/sys/route.d.ts +1 -1
  54. package/sys/route.js +11 -11
  55. package/www/example/ctr/main.d.ts +1 -1
  56. package/www/example/ctr/main.js +1 -1
  57. package/www/example/ctr/middle.d.ts +2 -2
  58. package/www/example/ctr/middle.js +1 -1
  59. package/www/example/ctr/test.d.ts +4 -2
  60. package/www/example/ctr/test.js +125 -42
  61. package/www/example/mod/test.d.ts +2 -2
  62. package/www/example/mod/test.js +2 -2
  63. package/www/example/mod/testdata.d.ts +1 -1
  64. package/www/example/mod/testdata.js +1 -1
  65. package/www/example/view/test.ejs +2 -1
  66. package/www/example/ws/mproxy.d.ts +1 -1
  67. package/www/example/ws/mproxy.js +3 -3
  68. package/www/example/ws/rproxy.d.ts +1 -1
  69. package/www/example/ws/rproxy.js +3 -3
  70. package/www/example/ws/rsocket.d.ts +1 -1
  71. package/www/example/ws/rsocket.js +3 -3
  72. package/www/example/ws/test.d.ts +1 -1
  73. package/www/example/ws/test.js +3 -3
package/lib/net.d.ts CHANGED
@@ -7,8 +7,8 @@
7
7
  import * as stream from 'stream';
8
8
  import * as http from 'http';
9
9
  import * as http2 from 'http2';
10
- import * as ctr from '../sys/ctr.js';
11
- import * as types from '../types/index.js';
10
+ import * as ctr from '#sys/ctr.js';
11
+ import * as types from '#types/index.js';
12
12
  import * as fd from './net/formdata.js';
13
13
  import * as lRequest from './net/request.js';
14
14
  import * as response from './net/response.js';
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 '../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';
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
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import * as s3 from '@aws-sdk/client-s3';
7
7
  import * as stream from 'stream';
8
- import * as sCtr from '../sys/ctr.js';
8
+ import * as sCtr from '#sys/ctr.js';
9
9
  /**
10
10
  * s3 文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/
11
11
  */
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 '../lib/core.js';
10
- import * as lText from '../lib/text.js';
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 '../lib/db.js';
7
- import * as lKv from '../lib/kv.js';
8
- import * as sCtr from '../sys/ctr.js';
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 '../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';
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 '../lib/db.js';
7
- import * as kv from '../lib/kv.js';
8
- import * as ctr from '../sys/ctr.js';
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 '../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';
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 '../sys/ctr.js';
7
- import * as types from '../types/index.js';
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 '../lib/text.js';
7
- import * as lCore from '../lib/core.js';
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 '../sys/ctr.js';
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
@@ -1,6 +1,6 @@
1
1
  // --- 库和定义 ---
2
- import * as core from '../../lib/core.js';
3
- import * as text from '../../lib/text.js';
2
+ import * as core from '#lib/core.js';
3
+ import * as text from '#lib/text.js';
4
4
  export class Connection {
5
5
  constructor(sftp, path) {
6
6
  this._client = sftp;
package/lib/ssh/shell.js CHANGED
@@ -1,4 +1,4 @@
1
- import * as lCore from '../../lib/core.js';
1
+ import * as lCore from '#lib/core.js';
2
2
  export class Connection {
3
3
  constructor(stream) {
4
4
  this._client = stream;
package/lib/text.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as types from '../types/index.js';
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: any): val is Exclude<typeof val, TFalsy>;
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 '../index.js';
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
@@ -3,7 +3,7 @@
3
3
  * Date: 2019-6-6 12:04:15
4
4
  * Last: 2020-3-29 23:41:21, 2024-1-18 17:16:50, 2024-8-5 10:55:21
5
5
  */
6
- import * as sCtr from '../sys/ctr.js';
6
+ import * as sCtr from '#sys/ctr.js';
7
7
  export interface IOptions {
8
8
  /** --- 时区 --- */
9
9
  'zone'?: number;
package/lib/time.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Date: 2019-6-6 12:04:15
4
4
  * Last: 2020-3-29 23:41:21, 2024-1-18 17:16:50, 2024-8-5 10:55:21
5
5
  */
6
- import * as sCtr from '../sys/ctr.js';
6
+ import * as sCtr from '#sys/ctr.js';
7
7
  /** --- 一小时的秒数 --- */
8
8
  export const HOUR = 3600;
9
9
  /** --- 一天的秒数 --- */
@@ -1,4 +1,4 @@
1
- import * as sCtr from '../sys/ctr.js';
1
+ import * as sCtr from '#sys/ctr.js';
2
2
  /**
3
3
  * 0. CloudFlare:https://developers.cloudflare.com/turnstile/get-started/server-side-validation/
4
4
  * 1. 腾讯云:https://cloud.tencent.com/document/product/1110/36926
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 '../lib/net.js';
9
- import * as lText from '../lib/text.js';
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 '../types/index.js';
9
- import * as sCtr from '../sys/ctr.js';
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 '../lib/text.js';
6
- import * as lNet from '../lib/net.js';
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
@@ -1,5 +1,5 @@
1
1
  import jszip from 'jszip';
2
- import * as types from '../types/index.js';
2
+ import * as types from '#types/index.js';
3
3
  /**
4
4
  * --- 本库主要用于读取 zip,请尽量不要用来写入 zip,尤其是大文件 zip ---
5
5
  */
package/lib/zip.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import jszip from 'jszip';
2
2
  import * as mime from '@litert/mime';
3
- import * as lText from '../lib/text.js';
3
+ import * as lText from '#lib/text.js';
4
4
  /**
5
5
  * --- 本库主要用于读取 zip,请尽量不要用来写入 zip,尤其是大文件 zip ---
6
6
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maiyunnet/kebab",
3
- "version": "3.0.3",
3
+ "version": "3.1.0",
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.888.0",
19
- "@aws-sdk/lib-storage": "^3.888.0",
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.14.5",
30
+ "mysql2": "^3.15.0",
28
31
  "ssh2": "^1.17.0",
29
32
  "svg-captcha": "^1.4.0",
30
- "tencentcloud-sdk-nodejs": "^4.1.116"
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.0",
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 '../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';
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 '../sys/route.js';
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 '../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';
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 '../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';
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 '../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';
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 '../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';
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
- sq.insert(this._$table + (opt.index ? ('_' + opt.index) : '')).values(cs, vs);
155
- const r = await db.execute(sq.getSql(), sq.getData());
156
- if (r.packet === null) {
157
- lCore.log(opt.pre instanceof sCtr.Ctr ? opt.pre : {}, '[insert, mod] ' + lText.stringifyJson(r.error?.message ?? '').slice(1, -1), '-error');
158
- return false;
159
- }
160
- if (r.packet.affectedRows > 0) {
161
- return true;
162
- }
163
- else {
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
@@ -7,7 +7,7 @@ import * as http from 'http';
7
7
  import * as http2 from 'http2';
8
8
  import * as net from 'net';
9
9
  import * as sCtr from './ctr.js';
10
- import * as types from '../types/index.js';
10
+ import * as types from '#types/index.js';
11
11
  /**
12
12
  * --- 清除已经加载的虚拟主机配置文件 ---
13
13
  */
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 '../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';
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 '../index.js';
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 (!config.set.staticPath) {
113
+ if (lText.isFalsy(config.set.staticPath)) {
114
114
  config.set.staticPath = config.const.urlStc;
115
115
  }
116
- if (!config.set.staticPathFull) {
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 + '.js';
249
+ const filePath = config.const.wsPath + pathLeft + '';
250
250
  if (!await lFs.isFile(filePath)) {
251
251
  // --- 指定的控制器不存在 ---
252
252
  data.socket?.destroy();
@@ -1,4 +1,4 @@
1
- import * as ctr from '../../../sys/ctr.js';
1
+ import * as ctr from '#sys/ctr.js';
2
2
  export default class extends ctr.Ctr {
3
3
  index(): string;
4
4
  }
@@ -1,4 +1,4 @@
1
- import * as ctr from '../../../sys/ctr.js';
1
+ import * as ctr from '#sys/ctr.js';
2
2
  export default class extends ctr.Ctr {
3
3
  index() {
4
4
  return `<a href="${this._config.const.urlBase}test">Hello world! Click here to visit demo.</a>`;
@@ -1,5 +1,5 @@
1
- import * as ctr from '../../../sys/ctr.js';
2
- import * as types from '../../../types/index.js';
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,4 +1,4 @@
1
- import * as ctr from '../../../sys/ctr.js';
1
+ import * as ctr from '#sys/ctr.js';
2
2
  export default class extends ctr.Ctr {
3
3
  onLoad() {
4
4
  if (this._config.const.path !== 'test/middle') {
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'fs';
2
- import * as sCtr from '../../../sys/ctr.js';
3
- import * as types from '../../../types/index.js';
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
  */