befly 3.8.4 → 3.8.6

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/dbHelper.ts CHANGED
@@ -302,6 +302,11 @@ export class DbHelper {
302
302
  throw new Error('数据库连接未初始化');
303
303
  }
304
304
 
305
+ // 强制类型检查:只接受字符串类型的 SQL
306
+ if (typeof sqlStr !== 'string') {
307
+ throw new Error(`executeWithConn 只接受字符串类型的 SQL,收到类型: ${typeof sqlStr},值: ${JSON.stringify(sqlStr)}`);
308
+ }
309
+
305
310
  // 记录开始时间
306
311
  const startTime = Date.now();
307
312
 
@@ -326,15 +331,17 @@ export class DbHelper {
326
331
  return result;
327
332
  } catch (error: any) {
328
333
  const duration = Date.now() - startTime;
329
- const truncatedSql = sqlStr.length > 200 ? sqlStr.substring(0, 200) + '...' : sqlStr;
330
334
 
331
335
  Logger.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
332
336
  Logger.error('SQL 执行错误');
333
337
  Logger.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
334
- Logger.error(`SQL 语句: ${truncatedSql}`);
338
+ Logger.error(`SQL 语句: ${sqlStr.length > 200 ? sqlStr.substring(0, 200) + '...' : sqlStr}`);
335
339
  Logger.error(`参数列表: ${JSON.stringify(params || [])}`);
336
340
  Logger.error(`执行耗时: ${duration}ms`);
337
341
  Logger.error(`错误信息: ${error.message}`);
342
+ if (error.stack) {
343
+ Logger.error(`错误堆栈:\n${error.stack}`);
344
+ }
338
345
  Logger.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
339
346
 
340
347
  const enhancedError: any = new Error(`SQL执行失败: ${error.message}`);
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 内置正则表达式别名(Befly 项目专用)
3
+ */
4
+ export const RegexAliases = {
5
+ // 数字类型
6
+ number: '^\\d+$',
7
+ integer: '^-?\\d+$',
8
+ float: '^-?\\d+(\\.\\d+)?$',
9
+ positive: '^[1-9]\\d*$',
10
+ negative: '^-\\d+$',
11
+ zero: '^0$',
12
+
13
+ // 字符串类型
14
+ word: '^[a-zA-Z]+$',
15
+ alphanumeric: '^[a-zA-Z0-9]+$',
16
+ alphanumeric_: '^[a-zA-Z0-9_]+$',
17
+ lowercase: '^[a-z]+$',
18
+ uppercase: '^[A-Z]+$',
19
+
20
+ // 中文
21
+ chinese: '^[\\u4e00-\\u9fa5]+$',
22
+ chinese_word: '^[\\u4e00-\\u9fa5a-zA-Z]+$',
23
+
24
+ // 常用格式
25
+ email: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$',
26
+ phone: '^1[3-9]\\d{9}$',
27
+ url: '^https?://',
28
+ ip: '^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$',
29
+ domain: '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$',
30
+
31
+ // 特殊格式
32
+ uuid: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
33
+ hex: '^[0-9a-fA-F]+$',
34
+ base64: '^[A-Za-z0-9+/=]+$',
35
+ md5: '^[a-f0-9]{32}$',
36
+ sha1: '^[a-f0-9]{40}$',
37
+ sha256: '^[a-f0-9]{64}$',
38
+
39
+ // 日期时间
40
+ date: '^\\d{4}-\\d{2}-\\d{2}$',
41
+ time: '^\\d{2}:\\d{2}:\\d{2}$',
42
+ datetime: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}',
43
+ year: '^\\d{4}$',
44
+ month: '^(0[1-9]|1[0-2])$',
45
+ day: '^(0[1-9]|[12]\\d|3[01])$',
46
+
47
+ // 代码相关
48
+ variable: '^[a-zA-Z_][a-zA-Z0-9_]*$',
49
+ constant: '^[A-Z][A-Z0-9_]*$',
50
+ package: '^[a-z][a-z0-9-]*$',
51
+
52
+ // 证件相关
53
+ id_card: '^\\d{17}[\\dXx]$',
54
+ passport: '^[a-zA-Z0-9]{5,17}$',
55
+
56
+ // 空值
57
+ empty: '^$',
58
+ notempty: '.+'
59
+ } as const;
package/lib/validator.ts CHANGED
@@ -5,66 +5,7 @@
5
5
 
6
6
  import type { TableDefinition, FieldDefinition } from '../types/common.js';
7
7
  import type { ValidationResult, ValidationError } from '../types/validator';
8
-
9
- /**
10
- * 内置正则表达式别名(项目专用)
11
- */
12
- const RegexAliases = {
13
- // 数字类型
14
- number: '^\\d+$',
15
- integer: '^-?\\d+$',
16
- float: '^-?\\d+(\\.\\d+)?$',
17
- positive: '^[1-9]\\d*$',
18
- negative: '^-\\d+$',
19
- zero: '^0$',
20
-
21
- // 字符串类型
22
- word: '^[a-zA-Z]+$',
23
- alphanumeric: '^[a-zA-Z0-9]+$',
24
- alphanumeric_: '^[a-zA-Z0-9_]+$',
25
- lowercase: '^[a-z]+$',
26
- uppercase: '^[A-Z]+$',
27
-
28
- // 中文
29
- chinese: '^[\\u4e00-\\u9fa5]+$',
30
- chinese_word: '^[\\u4e00-\\u9fa5a-zA-Z]+$',
31
-
32
- // 常用格式
33
- email: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$',
34
- phone: '^1[3-9]\\d{9}$',
35
- url: '^https?://',
36
- ip: '^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$',
37
- domain: '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$',
38
-
39
- // 特殊格式
40
- uuid: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
41
- hex: '^[0-9a-fA-F]+$',
42
- base64: '^[A-Za-z0-9+/=]+$',
43
- md5: '^[a-f0-9]{32}$',
44
- sha1: '^[a-f0-9]{40}$',
45
- sha256: '^[a-f0-9]{64}$',
46
-
47
- // 日期时间
48
- date: '^\\d{4}-\\d{2}-\\d{2}$',
49
- time: '^\\d{2}:\\d{2}:\\d{2}$',
50
- datetime: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}',
51
- year: '^\\d{4}$',
52
- month: '^(0[1-9]|1[0-2])$',
53
- day: '^(0[1-9]|[12]\\d|3[01])$',
54
-
55
- // 代码相关
56
- variable: '^[a-zA-Z_][a-zA-Z0-9_]*$',
57
- constant: '^[A-Z][A-Z0-9_]*$',
58
- package: '^[a-z][a-z0-9-]*$',
59
-
60
- // 证件相关
61
- id_card: '^\\d{17}[\\dXx]$',
62
- passport: '^[a-zA-Z0-9]{5,17}$',
63
-
64
- // 空值
65
- empty: '^$',
66
- notempty: '.+'
67
- } as const;
8
+ import { RegexAliases } from './regexAliases.js';
68
9
 
69
10
  /**
70
11
  * 验证器类(Befly 项目专用)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "befly",
3
- "version": "3.8.4",
3
+ "version": "3.8.6",
4
4
  "description": "Befly - 为 Bun 专属打造的 TypeScript API 接口框架核心引擎",
5
5
  "type": "module",
6
6
  "private": false,
@@ -69,5 +69,5 @@
69
69
  "es-toolkit": "^1.41.0",
70
70
  "pathe": "^2.0.3"
71
71
  },
72
- "gitHead": "40b4c3e6591454ff060416a6275142792e7de66c"
72
+ "gitHead": "42f9c0610527778b7d25678762360e1782cbec7f"
73
73
  }
package/types/addon.d.ts CHANGED
@@ -42,9 +42,6 @@ export interface AddonConfig {
42
42
  /** 主入口文件路径(相对于 addon 目录),例如 "index.ts" */
43
43
  entry?: string;
44
44
 
45
- /** 是否默认启用 */
46
- enabled?: boolean;
47
-
48
45
  /** 依赖的其他 addon 或核心包 */
49
46
  dependencies?: Record<string, string>;
50
47