@maiyunnet/kebab 3.1.6 → 3.1.8

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 (71) hide show
  1. package/index.d.ts +1 -1
  2. package/index.js +2 -2
  3. package/lib/captcha.js +2 -2
  4. package/lib/consistent.js +1 -1
  5. package/lib/core.d.ts +4 -4
  6. package/lib/core.js +9 -10
  7. package/lib/cron.js +5 -5
  8. package/lib/crypto.js +2 -2
  9. package/lib/db.d.ts +2 -2
  10. package/lib/db.js +5 -5
  11. package/lib/dns.d.ts +1 -1
  12. package/lib/dns.js +5 -5
  13. package/lib/jwt.d.ts +3 -3
  14. package/lib/jwt.js +4 -4
  15. package/lib/kv.d.ts +2 -2
  16. package/lib/kv.js +3 -3
  17. package/lib/lan.js +1 -1
  18. package/lib/net/formdata.js +2 -2
  19. package/lib/net/request.d.ts +1 -1
  20. package/lib/net/request.js +1 -1
  21. package/lib/net/response.d.ts +1 -1
  22. package/lib/net.d.ts +5 -5
  23. package/lib/net.js +9 -11
  24. package/lib/s3.d.ts +1 -1
  25. package/lib/s3.js +2 -2
  26. package/lib/scan.d.ts +3 -3
  27. package/lib/scan.js +6 -6
  28. package/lib/session.d.ts +3 -3
  29. package/lib/session.js +6 -6
  30. package/lib/sql.d.ts +2 -2
  31. package/lib/sql.js +3 -3
  32. package/lib/ssh/sftp.js +2 -2
  33. package/lib/ssh/shell.js +1 -1
  34. package/lib/text.d.ts +8 -4
  35. package/lib/text.js +23 -5
  36. package/lib/time.d.ts +1 -1
  37. package/lib/time.js +1 -1
  38. package/lib/turnstile.d.ts +1 -1
  39. package/lib/turnstile.js +2 -2
  40. package/lib/ws.d.ts +3 -3
  41. package/lib/ws.js +2 -2
  42. package/lib/zip.js +1 -1
  43. package/package.json +2 -2
  44. package/sys/child.js +6 -6
  45. package/sys/cmd.js +6 -6
  46. package/sys/ctr.d.ts +7 -5
  47. package/sys/ctr.js +10 -8
  48. package/sys/master.js +8 -8
  49. package/sys/mod.d.ts +6 -6
  50. package/sys/mod.js +7 -7
  51. package/sys/route.d.ts +9 -5
  52. package/sys/route.js +52 -45
  53. package/www/example/ctr/main.d.ts +1 -1
  54. package/www/example/ctr/main.js +1 -1
  55. package/www/example/ctr/middle.d.ts +3 -2
  56. package/www/example/ctr/middle.js +10 -1
  57. package/www/example/ctr/test.d.ts +2 -2
  58. package/www/example/ctr/test.js +24 -24
  59. package/www/example/mod/test.d.ts +2 -2
  60. package/www/example/mod/test.js +2 -2
  61. package/www/example/mod/testdata.d.ts +1 -1
  62. package/www/example/mod/testdata.js +1 -1
  63. package/www/example/ws/mproxy.d.ts +1 -1
  64. package/www/example/ws/mproxy.js +3 -3
  65. package/www/example/ws/rproxy.d.ts +1 -1
  66. package/www/example/ws/rproxy.js +3 -3
  67. package/www/example/ws/rsocket.d.ts +1 -1
  68. package/www/example/ws/rsocket.js +3 -3
  69. package/www/example/ws/test.d.ts +1 -1
  70. package/www/example/ws/test.js +3 -3
  71. package/tsconfig.json +0 -26
package/index.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * ------------------------
9
9
  */
10
10
  /** --- 当前系统版本号 --- */
11
- export declare const VER = "3.1.6";
11
+ export declare const VER = "3.1.8";
12
12
  /** --- 框架根目录,以 / 结尾 --- */
13
13
  export declare const ROOT_PATH: string;
14
14
  export declare const LIB_PATH: string;
package/index.js CHANGED
@@ -9,9 +9,9 @@
9
9
  * ------------------------
10
10
  */
11
11
  /** --- 当前系统版本号 --- */
12
- export const VER = '3.1.6';
12
+ export const VER = '3.1.8';
13
13
  // --- 服务端用的路径 ---
14
- const imu = import.meta.url.replace('file://', '').replace(/^\/(\w:)/, '$1').replace(/\\/g, '/');
14
+ const imu = decodeURIComponent(import.meta.url).replace('file://', '').replace(/^\/(\w:)/, '$1');
15
15
  /** --- /xxx/xxx --- */
16
16
  const dirname = imu.slice(0, imu.lastIndexOf('/'));
17
17
  /** --- 框架根目录,以 / 结尾 --- */
package/lib/captcha.js CHANGED
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import * as svgCaptcha from 'svg-captcha';
7
7
  import * as mime from '@litert/mime';
8
- import * as core from '#lib/core.js';
9
- import * as kebab from '#index.js';
8
+ import * as core from '#kebab/lib/core.js';
9
+ import * as kebab from '#kebab/index.js';
10
10
  svgCaptcha.loadFont(kebab.LIB_PATH + 'captcha/zcool-addict-italic.ttf');
11
11
  export class Captcha {
12
12
  constructor(opt) {
package/lib/consistent.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Date: 2022-09-12 10:51:16
4
4
  * Last: 2022-09-12 10:51:20, 2023-3-17 10:52:04, 2023-11-15 11:45:28
5
5
  */
6
- import * as crypto from '#lib/crypto.js';
6
+ import * as crypto from '#kebab/lib/crypto.js';
7
7
  export class Consistent {
8
8
  constructor(vcount) {
9
9
  /** --- 虚拟节点数量 --- */
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 kebab from '#index.js';
5
- import * as lResponse from '#lib/net/response.js';
6
- import * as sCtr from '#sys/ctr.js';
4
+ import * as kebab from '#kebab/index.js';
5
+ import * as lResponse from '#kebab/lib/net/response.js';
6
+ import * as sCtr from '#kebab/sys/ctr.js';
7
7
  /** --- 全局参数 --- */
8
8
  export declare const globalConfig: kebab.IConfig & {
9
9
  'httpPort': number;
@@ -225,7 +225,7 @@ export declare function ls(opt: {
225
225
  'name': string;
226
226
  }>>;
227
227
  /**
228
- * --- 完整的克隆一份数组/对象,Kebab: yes, Mutton: no ---
228
+ * --- 完整的克隆一份数组/对象 ---
229
229
  * @param obj 要克隆的对象
230
230
  */
231
231
  export declare function clone<T>(obj: T): T;
package/lib/core.js CHANGED
@@ -5,14 +5,14 @@
5
5
  */
6
6
  import * as cp from 'child_process';
7
7
  import * as stream from 'stream';
8
- import * as kebab from '#index.js';
9
- import * as lTime from '#lib/time.js';
10
- import * as lFs from '#lib/fs.js';
11
- import * as lText from '#lib/text.js';
12
- import * as lNet from '#lib/net.js';
13
- import * as lCrypto from '#lib/crypto.js';
14
- import * as lResponse from '#lib/net/response.js';
15
- import * as sCtr from '#sys/ctr.js';
8
+ import * as kebab from '#kebab/index.js';
9
+ import * as lTime from '#kebab/lib/time.js';
10
+ import * as lFs from '#kebab/lib/fs.js';
11
+ import * as lText from '#kebab/lib/text.js';
12
+ import * as lNet from '#kebab/lib/net.js';
13
+ import * as lCrypto from '#kebab/lib/crypto.js';
14
+ import * as lResponse from '#kebab/lib/net/response.js';
15
+ import * as sCtr from '#kebab/sys/ctr.js';
16
16
  /** --- 全局参数 --- */
17
17
  export const globalConfig = {};
18
18
  /**
@@ -304,7 +304,6 @@ export function realIP(ctr, name = '') {
304
304
  const req = ctr.getPrototype('_req');
305
305
  return req.socket.remoteAddress ?? '';
306
306
  }
307
- // --- 以下 Mutton 没有 ---
308
307
  /**
309
308
  * --- 间隔一段时间 ---
310
309
  * @param ms 间隔毫秒
@@ -711,7 +710,7 @@ export async function ls(opt) {
711
710
  return j.data;
712
711
  }
713
712
  /**
714
- * --- 完整的克隆一份数组/对象,Kebab: yes, Mutton: no ---
713
+ * --- 完整的克隆一份数组/对象 ---
715
714
  * @param obj 要克隆的对象
716
715
  */
717
716
  export function clone(obj) {
package/lib/cron.js CHANGED
@@ -3,11 +3,11 @@
3
3
  * Date: 2025-9-20 19:46:30
4
4
  * Last: 2025-9-20 19:46:32
5
5
  */
6
- import * as kebab from '#index.js';
7
- import * as lFs from '#lib/fs.js';
8
- import * as lCore from '#lib/core.js';
9
- import * as lText from '#lib/text.js';
10
- import * as lTime from '#lib/time.js';
6
+ import * as kebab from '#kebab/index.js';
7
+ import * as lFs from '#kebab/lib/fs.js';
8
+ import * as lCore from '#kebab/lib/core.js';
9
+ import * as lText from '#kebab/lib/text.js';
10
+ import * as lTime from '#kebab/lib/time.js';
11
11
  /** --- 定时任务列表 --- */
12
12
  const regulars = [];
13
13
  /** --- 获取定时任务列表 --- */
package/lib/crypto.js CHANGED
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import * as crypto from 'crypto';
7
7
  // --- 库和定义 ---
8
- import * as lFs from '#lib/fs.js';
9
- import * as lCore from '#lib/core.js';
8
+ import * as lFs from '#kebab/lib/fs.js';
9
+ import * as lCore from '#kebab/lib/core.js';
10
10
  // --- 非对称加密 ---
11
11
  /**
12
12
  * --- 创建非对称秘钥 ---
package/lib/db.d.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  * Last: 2020-4-13 15:34:45, 2022-09-12 13:10:34, 2023-5-24 18:29:38, 2024-7-11 14:37:54, 2024-8-25 00:32:53, 2024-9-22 17:30:47, 2025-8-3 20:24:03
5
5
  */
6
6
  import * as mysql2 from 'mysql2/promise';
7
- import * as kebab from '#index.js';
8
- import * as sCtr from '#sys/ctr.js';
7
+ import * as kebab from '#kebab/index.js';
8
+ import * as sCtr from '#kebab/sys/ctr.js';
9
9
  /** --- query 返回的数据 --- */
10
10
  export interface IData {
11
11
  'rows': any[] | null;
package/lib/db.js CHANGED
@@ -6,11 +6,11 @@
6
6
  // --- Pool 是使用时必须要一个用户创建一份的,Connection 是池子里获取的 ---
7
7
  // --- 第三方 ---
8
8
  import * as mysql2 from 'mysql2/promise';
9
- import * as lTime from '#lib/time.js';
10
- import * as lSql from '#lib/sql.js';
11
- import * as lCore from '#lib/core.js';
12
- import * as lText from '#lib/text.js';
13
- import * as sCtr from '#sys/ctr.js';
9
+ import * as lTime from '#kebab/lib/time.js';
10
+ import * as lSql from '#kebab/lib/sql.js';
11
+ import * as lCore from '#kebab/lib/core.js';
12
+ import * as lText from '#kebab/lib/text.js';
13
+ import * as sCtr from '#kebab/sys/ctr.js';
14
14
  /** --- 连接列表池 --- */
15
15
  const connections = [];
16
16
  /**
package/lib/dns.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Date: 2019-6-19
4
4
  * Last: 2022-09-12 20:58:07, 2024-2-21 17:55:54, 2025-6-13 19:08:56
5
5
  */
6
- import * as ctr from '#sys/ctr.js';
6
+ import * as ctr from '#kebab/sys/ctr.js';
7
7
  /**
8
8
  * 0.DNSPod:https://www.dnspod.cn/docs/index.html(腾讯云也请使用 DNSPod 的 API)
9
9
  * 1.阿里云:https://help.aliyun.com/document_detail/29745.html
package/lib/dns.js CHANGED
@@ -4,11 +4,11 @@
4
4
  * Last: 2022-09-12 20:58:07, 2024-2-21 17:55:54, 2025-6-13 19:08:56
5
5
  */
6
6
  // --- 库和定义 ---
7
- import * as net from '#lib/net.js';
8
- import * as core from '#lib/core.js';
9
- import * as text from '#lib/text.js';
10
- import * as crypto from '#lib/crypto.js';
11
- import * as response from '#lib/net/response.js';
7
+ import * as net from '#kebab/lib/net.js';
8
+ import * as core from '#kebab/lib/core.js';
9
+ import * as text from '#kebab/lib/text.js';
10
+ import * as crypto from '#kebab/lib/crypto.js';
11
+ import * as response from '#kebab/lib/net/response.js';
12
12
  /**
13
13
  * 0.DNSPod:https://www.dnspod.cn/docs/index.html(腾讯云也请使用 DNSPod 的 API)
14
14
  * 1.阿里云:https://help.aliyun.com/document_detail/29745.html
package/lib/jwt.d.ts CHANGED
@@ -3,9 +3,9 @@
3
3
  * Date: 2023-1-31 20:34:47
4
4
  * Last: 2023-1-31 20:34:47, 2023-12-8 13:55:09
5
5
  */
6
- import * as kebab from '#index.js';
7
- import * as lKv from '#lib/kv.js';
8
- import * as sCtr from '#sys/ctr.js';
6
+ import * as kebab from '#kebab/index.js';
7
+ import * as lKv from '#kebab/lib/kv.js';
8
+ import * as sCtr from '#kebab/sys/ctr.js';
9
9
  export interface IOptions {
10
10
  'name'?: string;
11
11
  'ttl'?: number;
package/lib/jwt.js CHANGED
@@ -3,10 +3,10 @@
3
3
  * Date: 2023-1-31 20:34:47
4
4
  * Last: 2023-1-31 20:34:47, 2023-12-8 13:55:09
5
5
  */
6
- import * as lCore from '#lib/core.js';
7
- import * as lTime from '#lib/time.js';
8
- import * as lText from '#lib/text.js';
9
- import * as lCrypto from '#lib/crypto.js';
6
+ import * as lCore from '#kebab/lib/core.js';
7
+ import * as lTime from '#kebab/lib/time.js';
8
+ import * as lText from '#kebab/lib/text.js';
9
+ import * as lCrypto from '#kebab/lib/crypto.js';
10
10
  export class Jwt {
11
11
  /**
12
12
  * --- 初始化函数,相当于 construct ---
package/lib/kv.d.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  * Last: 2020-3-28 18:54:04, 2022-09-12 23:24:45, 2022-09-22 01:06:22, 2024-2-21 13:32:56, 2024-8-21 16:59:57
5
5
  */
6
6
  import * as redis from '@litert/redis';
7
- import * as kebab from '#index.js';
8
- import * as sCtr from '#sys/ctr.js';
7
+ import * as kebab from '#kebab/index.js';
8
+ import * as sCtr from '#kebab/sys/ctr.js';
9
9
  /** --- 连接信息 --- */
10
10
  export interface IConnectionInfo {
11
11
  'id': number;
package/lib/kv.js CHANGED
@@ -7,9 +7,9 @@
7
7
  // --- 为啥 Pool 要独立,因为有些配置项目不能存在 Connection 是用户单独使用的,例如 pre ---
8
8
  // --- 第三方 ---
9
9
  import * as redis from '@litert/redis';
10
- import * as lTime from '#lib/time.js';
11
- import * as lText from '#lib/text.js';
12
- import * as lCore from '#lib/core.js';
10
+ import * as lTime from '#kebab/lib/time.js';
11
+ import * as lText from '#kebab/lib/text.js';
12
+ import * as lCore from '#kebab/lib/core.js';
13
13
  /** --- 连接列表(同一个 host、port、index、auth 只有一个连接) --- */
14
14
  const connections = [];
15
15
  /**
package/lib/lan.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as os from 'os';
2
- import * as lCore from '#lib/core.js';
2
+ import * as lCore from '#kebab/lib/core.js';
3
3
  /**
4
4
  * --- 获取当前网卡的 IP、MAC 信息 ---
5
5
  */
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import * as stream from 'stream';
7
7
  import * as mime from '@litert/mime';
8
- import * as core from '#lib/core.js';
9
- import * as fs from '#lib/fs.js';
8
+ import * as core from '#kebab/lib/core.js';
9
+ import * as fs from '#kebab/lib/fs.js';
10
10
  export class FormData extends stream.Readable {
11
11
  constructor() {
12
12
  super(...arguments);
@@ -4,7 +4,7 @@
4
4
  * Last: 2020-4-9 20:47:58, 2022-09-10 01:35:34, 2025-9-23 12:41:58
5
5
  */
6
6
  import * as stream from 'stream';
7
- import * as lNet from '#lib/net.js';
7
+ import * as lNet from '#kebab/lib/net.js';
8
8
  import * as lResponse from './response.js';
9
9
  export declare class Request {
10
10
  /** --- get 或 post 的数据 --- */
@@ -1,4 +1,4 @@
1
- import * as lNet from '#lib/net.js';
1
+ import * as lNet from '#kebab/lib/net.js';
2
2
  export class Request {
3
3
  constructor(url) {
4
4
  /** --- get 或 post 的数据 --- */
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import * as hc from '@litert/http-client';
7
7
  import * as stream from 'stream';
8
- import * as lNet from '#lib/net.js';
8
+ import * as lNet from '#kebab/lib/net.js';
9
9
  export declare class Response {
10
10
  /** --- httpClient 请求对象 --- */
11
11
  private readonly _req;
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 kebab from '#index.js';
11
- import * as sCtr from '#sys/ctr.js';
10
+ import * as kebab from '#kebab/index.js';
11
+ import * as sCtr from '#kebab/sys/ctr.js';
12
12
  import * as fd from './net/formdata.js';
13
13
  import * as lRequest from './net/request.js';
14
14
  import * as lResponse from './net/response.js';
@@ -70,7 +70,7 @@ export declare function buildCookieQuery(cookie: Record<string, ICookie>, uri: k
70
70
  */
71
71
  export declare function resetCookieSession(cookie: Record<string, ICookie>): void;
72
72
  /**
73
- * --- 创建 FormData 对象, Mutton: false, Kebab: true ---
73
+ * --- 创建 FormData 对象 ---
74
74
  */
75
75
  export declare function getFormData(): fd.FormData;
76
76
  /**
@@ -80,7 +80,7 @@ export declare function getFormData(): fd.FormData;
80
80
  */
81
81
  export declare function filterProxyHeaders(headers: http.IncomingHttpHeaders | http2.IncomingHttpHeaders | THttpHeaders, res?: http2.Http2ServerResponse | http.ServerResponse): Record<string, string | string[]>;
82
82
  /**
83
- * --- 正向 mproxy 代理,读取 get 的 url 为实际请求地址 ---
83
+ * --- 正向 mproxy 代理,注意提前处理不要自动处理 post 数据,读取 get 的 url 为实际请求地址 ---
84
84
  * --- get: url, auth ---
85
85
  * @param ctr 当前控制器
86
86
  * @param auth 校验字符串,读取 get 的 auth 和本参数做比对
@@ -93,7 +93,7 @@ export declare function mproxy(ctr: sCtr.Ctr, auth: string, opt?: IMproxyOptions
93
93
  */
94
94
  export declare function mproxyData(ctr: sCtr.Ctr): any;
95
95
  /**
96
- * --- 反向代理,将本服务器的某个路由反代到其他网址 ---
96
+ * --- 反向代理,注意提前处理不要自动处理 post 数据,将本服务器的某个路由反代到其他网址 ---
97
97
  * @param ctr 当前控制器
98
98
  * @param route 要反代的路由
99
99
  * @param opt 参数
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 kebab from '#index.js';
12
- import * as lFs from '#lib/fs.js';
13
- import * as lText from '#lib/text.js';
14
- import * as lTime from '#lib/time.js';
11
+ import * as kebab from '#kebab/index.js';
12
+ import * as lFs from '#kebab/lib/fs.js';
13
+ import * as lText from '#kebab/lib/text.js';
14
+ import * as lTime from '#kebab/lib/time.js';
15
15
  // --- 自己 ---
16
16
  import * as fd from './net/formdata.js';
17
17
  import * as lRequest from './net/request.js';
@@ -423,7 +423,7 @@ export function resetCookieSession(cookie) {
423
423
  }
424
424
  }
425
425
  /**
426
- * --- 创建 FormData 对象, Mutton: false, Kebab: true ---
426
+ * --- 创建 FormData 对象 ---
427
427
  */
428
428
  export function getFormData() {
429
429
  return new fd.FormData();
@@ -457,7 +457,7 @@ export function filterProxyHeaders(headers, res) {
457
457
  return heads;
458
458
  }
459
459
  /**
460
- * --- 正向 mproxy 代理,读取 get 的 url 为实际请求地址 ---
460
+ * --- 正向 mproxy 代理,注意提前处理不要自动处理 post 数据,读取 get 的 url 为实际请求地址 ---
461
461
  * --- get: url, auth ---
462
462
  * @param ctr 当前控制器
463
463
  * @param auth 校验字符串,读取 get 的 auth 和本参数做比对
@@ -466,7 +466,6 @@ export function filterProxyHeaders(headers, res) {
466
466
  export async function mproxy(ctr, auth, opt = {}) {
467
467
  const req = ctr.getPrototype('_req');
468
468
  const res = ctr.getPrototype('_res');
469
- const input = ctr.getPrototype('_input');
470
469
  /** --- 客户端请求中的 get 的数据 --- */
471
470
  const get = ctr.getPrototype('_get');
472
471
  if (get['auth'] !== auth) {
@@ -479,7 +478,7 @@ export async function mproxy(ctr, auth, opt = {}) {
479
478
  opt.headers ??= {};
480
479
  Object.assign(opt.headers, filterProxyHeaders(req.headers));
481
480
  // --- 发起请求 ---
482
- const rres = await request(get['url'], req.headers['content-type']?.includes('form-data') ? req : input, opt);
481
+ const rres = await request(get['url'], req, opt);
483
482
  if (rres.error) {
484
483
  return -2;
485
484
  }
@@ -510,7 +509,7 @@ export function mproxyData(ctr) {
510
509
  return data;
511
510
  }
512
511
  /**
513
- * --- 反向代理,将本服务器的某个路由反代到其他网址 ---
512
+ * --- 反向代理,注意提前处理不要自动处理 post 数据,将本服务器的某个路由反代到其他网址 ---
514
513
  * @param ctr 当前控制器
515
514
  * @param route 要反代的路由
516
515
  * @param opt 参数
@@ -519,7 +518,6 @@ export async function rproxy(ctr, route, opt = {}) {
519
518
  const req = ctr.getPrototype('_req');
520
519
  const res = ctr.getPrototype('_res');
521
520
  const config = ctr.getPrototype('_config');
522
- const input = ctr.getPrototype('_input');
523
521
  const path = config.const.path + (config.const.qs ? '?' + config.const.qs : '');
524
522
  for (const key in route) {
525
523
  if (!path.startsWith(key)) {
@@ -534,7 +532,7 @@ export async function rproxy(ctr, route, opt = {}) {
534
532
  opt.headers ??= {};
535
533
  Object.assign(opt.headers, filterProxyHeaders(req.headers));
536
534
  // --- 发起请求 ---
537
- const rres = await request(route[key] + lpath, req.headers['content-type']?.includes('form-data') ? req : input, opt);
535
+ const rres = await request(route[key] + lpath, req, opt);
538
536
  if (rres.error) {
539
537
  return false;
540
538
  }
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 '#kebab/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 '#kebab/lib/core.js';
10
+ import * as lText from '#kebab/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 '#kebab/lib/db.js';
7
+ import * as lKv from '#kebab/lib/kv.js';
8
+ import * as sCtr from '#kebab/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 '#kebab/lib/core.js';
21
+ import * as lDb from '#kebab/lib/db.js';
22
+ import * as lKv from '#kebab/lib/kv.js';
23
+ import * as lSql from '#kebab/lib/sql.js';
24
+ import * as lTime from '#kebab/lib/time.js';
25
+ import * as lText from '#kebab/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 '#kebab/lib/db.js';
7
+ import * as kv from '#kebab/lib/kv.js';
8
+ import * as ctr from '#kebab/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 '#kebab/lib/core.js';
21
+ import * as time from '#kebab/lib/time.js';
22
+ import * as db from '#kebab/lib/db.js';
23
+ import * as kv from '#kebab/lib/kv.js';
24
+ import * as sql from '#kebab/lib/sql.js';
25
+ import * as text from '#kebab/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 kebab from '#index.js';
7
- import * as ctr from '#sys/ctr.js';
6
+ import * as kebab from '#kebab/index.js';
7
+ import * as ctr from '#kebab/sys/ctr.js';
8
8
  export declare class Sql {
9
9
  /** --- 前置 --- */
10
10
  private readonly _pre;
package/lib/sql.js CHANGED
@@ -1,9 +1,9 @@
1
- import * as lText from '#lib/text.js';
2
- import * as lCore from '#lib/core.js';
1
+ import * as lText from '#kebab/lib/text.js';
2
+ import * as lCore from '#kebab/lib/core.js';
3
3
  // --- 第三方 ---
4
4
  import * as mysql2 from 'mysql2/promise';
5
5
  // --- 库和定义 ---
6
- import * as ctr from '#sys/ctr.js';
6
+ import * as ctr from '#kebab/sys/ctr.js';
7
7
  /** --- filed 用 token --- */
8
8
  let columnToken = '';
9
9
  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 '#kebab/lib/core.js';
3
+ import * as text from '#kebab/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 '#kebab/lib/core.js';
2
2
  export class Connection {
3
3
  constructor(stream) {
4
4
  this._client = stream;
package/lib/text.d.ts 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, 2025-9-23 12:51:49
5
5
  */
6
- import * as kebab from '#index.js';
6
+ import * as kebab from '#kebab/index.js';
7
7
  /**
8
8
  * --- 将文件大小格式化为带单位的字符串 ---
9
9
  * @param size 文件大小
@@ -118,17 +118,17 @@ export declare function isRealPath(path: string): boolean;
118
118
  */
119
119
  export declare function getFilename(path: string): string;
120
120
  /**
121
- * --- 将普通的返回 JSON 对象序列化为字符串,Mutton 不能使用 ---
121
+ * --- 将普通的返回 JSON 对象序列化为字符串 ---
122
122
  * @param o 返回 JSON 对象
123
123
  */
124
124
  export declare function stringifyResult(rtn: kebab.Json): string;
125
125
  /**
126
- * --- 将字符串解析为对象,返回 false 代表解析失败,支持 BigInt,Kebab true, Mutton false ---
126
+ * --- 将字符串解析为对象,返回 false 代表解析失败,支持 BigInt ---
127
127
  * @param str 要解析的 json 字符串
128
128
  */
129
129
  export declare function parseJson(str: string): any;
130
130
  /**
131
- * --- 将对象转换为 json 字符串,返回 false 代表解析失败,支持 BigInt,Kebab true, Mutton false ---
131
+ * --- 将对象转换为 json 字符串,返回 false 代表解析失败,支持 BigInt ---
132
132
  * @param obj 要转换的 json 对象
133
133
  * @param space 美化方式
134
134
  */
@@ -138,6 +138,10 @@ export declare function stringifyJson(obj: kebab.Json, space?: string | number):
138
138
  * @param buf 原始 buffer
139
139
  */
140
140
  export declare function stringifyBuffer(buf: Buffer): string;
141
+ /**
142
+ * --- 递归删除 json 中的字符串首尾空格,会返回一个新的对象 ---
143
+ */
144
+ export declare function trimJson(json: kebab.Json): kebab.Json;
141
145
  type TFalsy = false | '' | 0 | null | undefined | typeof NaN;
142
146
  /**
143
147
  * --- 判断一个值是否是虚假的(为 null/undefined/空字符串/false/0) ---