befly 3.10.18 → 3.11.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.
Files changed (223) hide show
  1. package/README.md +83 -307
  2. package/dist/befly.config.d.ts +7 -0
  3. package/{befly.config.ts → dist/befly.config.js} +11 -36
  4. package/dist/befly.js +15621 -0
  5. package/dist/befly.min.js +21 -0
  6. package/dist/checks/checkApi.d.ts +1 -0
  7. package/{checks/checkApi.ts → dist/checks/checkApi.js} +12 -30
  8. package/dist/checks/checkHook.d.ts +1 -0
  9. package/dist/checks/checkHook.js +86 -0
  10. package/dist/checks/checkMenu.d.ts +7 -0
  11. package/{checks/checkMenu.ts → dist/checks/checkMenu.js} +18 -53
  12. package/dist/checks/checkPlugin.d.ts +1 -0
  13. package/dist/checks/checkPlugin.js +86 -0
  14. package/dist/checks/checkTable.d.ts +6 -0
  15. package/{checks/checkTable.ts → dist/checks/checkTable.js} +17 -41
  16. package/dist/configs/presetFields.d.ts +4 -0
  17. package/{configs/presetFields.ts → dist/configs/presetFields.js} +1 -1
  18. package/dist/configs/presetRegexp.d.ts +145 -0
  19. package/{utils/regex.ts → dist/configs/presetRegexp.js} +8 -31
  20. package/dist/hooks/auth.d.ts +7 -0
  21. package/{hooks/auth.ts → dist/hooks/auth.js} +8 -10
  22. package/dist/hooks/cors.d.ts +11 -0
  23. package/{hooks/cors.ts → dist/hooks/cors.js} +5 -13
  24. package/dist/hooks/parser.d.ts +14 -0
  25. package/{hooks/parser.ts → dist/hooks/parser.js} +31 -45
  26. package/dist/hooks/permission.d.ts +14 -0
  27. package/{hooks/permission.ts → dist/hooks/permission.js} +16 -25
  28. package/dist/hooks/validator.d.ts +11 -0
  29. package/{hooks/validator.ts → dist/hooks/validator.js} +9 -14
  30. package/dist/index.d.ts +26 -0
  31. package/{main.ts → dist/index.js} +61 -100
  32. package/dist/lib/asyncContext.d.ts +21 -0
  33. package/dist/lib/asyncContext.js +27 -0
  34. package/dist/lib/cacheHelper.d.ts +95 -0
  35. package/{lib/cacheHelper.ts → dist/lib/cacheHelper.js} +45 -105
  36. package/dist/lib/cacheKeys.d.ts +23 -0
  37. package/{lib/cacheKeys.ts → dist/lib/cacheKeys.js} +5 -10
  38. package/dist/lib/cipher.d.ts +153 -0
  39. package/{lib/cipher.ts → dist/lib/cipher.js} +23 -44
  40. package/dist/lib/connect.d.ts +91 -0
  41. package/{lib/connect.ts → dist/lib/connect.js} +47 -88
  42. package/dist/lib/dbDialect.d.ts +87 -0
  43. package/{lib/dbDialect.ts → dist/lib/dbDialect.js} +32 -112
  44. package/dist/lib/dbHelper.d.ts +204 -0
  45. package/{lib/dbHelper.ts → dist/lib/dbHelper.js} +82 -241
  46. package/dist/lib/dbUtils.d.ts +68 -0
  47. package/{lib/dbUtils.ts → dist/lib/dbUtils.js} +51 -126
  48. package/dist/lib/jwt.d.ts +13 -0
  49. package/{lib/jwt.ts → dist/lib/jwt.js} +11 -32
  50. package/dist/lib/logger.d.ts +42 -0
  51. package/dist/lib/logger.js +1144 -0
  52. package/dist/lib/redisHelper.d.ts +185 -0
  53. package/{lib/redisHelper.ts → dist/lib/redisHelper.js} +97 -141
  54. package/dist/lib/sqlBuilder.d.ts +160 -0
  55. package/{lib/sqlBuilder.ts → dist/lib/sqlBuilder.js} +132 -278
  56. package/dist/lib/sqlCheck.d.ts +23 -0
  57. package/{lib/sqlCheck.ts → dist/lib/sqlCheck.js} +24 -41
  58. package/dist/lib/validator.d.ts +45 -0
  59. package/{lib/validator.ts → dist/lib/validator.js} +44 -61
  60. package/dist/loader/loadApis.d.ts +12 -0
  61. package/{loader/loadApis.ts → dist/loader/loadApis.js} +10 -20
  62. package/dist/loader/loadHooks.d.ts +7 -0
  63. package/dist/loader/loadHooks.js +35 -0
  64. package/dist/loader/loadPlugins.d.ts +8 -0
  65. package/{loader/loadPlugins.ts → dist/loader/loadPlugins.js} +14 -26
  66. package/dist/paths.d.ts +93 -0
  67. package/{paths.ts → dist/paths.js} +6 -19
  68. package/dist/plugins/cache.d.ts +16 -0
  69. package/{plugins/cache.ts → dist/plugins/cache.js} +7 -12
  70. package/dist/plugins/cipher.d.ts +12 -0
  71. package/{plugins/cipher.ts → dist/plugins/cipher.js} +4 -6
  72. package/dist/plugins/config.d.ts +12 -0
  73. package/dist/plugins/config.js +8 -0
  74. package/dist/plugins/db.d.ts +16 -0
  75. package/{plugins/db.ts → dist/plugins/db.js} +11 -17
  76. package/dist/plugins/jwt.d.ts +12 -0
  77. package/dist/plugins/jwt.js +12 -0
  78. package/dist/plugins/logger.d.ts +32 -0
  79. package/{plugins/logger.ts → dist/plugins/logger.js} +5 -8
  80. package/dist/plugins/redis.d.ts +16 -0
  81. package/{plugins/redis.ts → dist/plugins/redis.js} +9 -12
  82. package/dist/plugins/tool.d.ts +81 -0
  83. package/{plugins/tool.ts → dist/plugins/tool.js} +9 -30
  84. package/dist/router/api.d.ts +14 -0
  85. package/dist/router/api.js +107 -0
  86. package/dist/router/static.d.ts +9 -0
  87. package/{router/static.ts → dist/router/static.js} +20 -34
  88. package/dist/scripts/ensureDist.d.ts +1 -0
  89. package/dist/scripts/ensureDist.js +296 -0
  90. package/dist/sync/syncApi.d.ts +3 -0
  91. package/{sync/syncApi.ts → dist/sync/syncApi.js} +35 -55
  92. package/dist/sync/syncCache.d.ts +2 -0
  93. package/{sync/syncCache.ts → dist/sync/syncCache.js} +1 -6
  94. package/dist/sync/syncDev.d.ts +6 -0
  95. package/{sync/syncDev.ts → dist/sync/syncDev.js} +29 -62
  96. package/dist/sync/syncMenu.d.ts +14 -0
  97. package/{sync/syncMenu.ts → dist/sync/syncMenu.js} +65 -125
  98. package/dist/sync/syncTable.d.ts +151 -0
  99. package/{sync/syncTable.ts → dist/sync/syncTable.js} +172 -379
  100. package/{types → dist/types}/api.d.ts +12 -51
  101. package/dist/types/api.js +4 -0
  102. package/{types → dist/types}/befly.d.ts +32 -227
  103. package/dist/types/befly.js +4 -0
  104. package/{types → dist/types}/cache.d.ts +7 -15
  105. package/dist/types/cache.js +4 -0
  106. package/dist/types/cipher.d.ts +27 -0
  107. package/dist/types/cipher.js +7 -0
  108. package/{types → dist/types}/common.d.ts +8 -33
  109. package/dist/types/common.js +5 -0
  110. package/{types → dist/types}/context.d.ts +3 -5
  111. package/dist/types/context.js +4 -0
  112. package/{types → dist/types}/crypto.d.ts +0 -3
  113. package/dist/types/crypto.js +4 -0
  114. package/dist/types/database.d.ts +138 -0
  115. package/dist/types/database.js +4 -0
  116. package/dist/types/hook.d.ts +17 -0
  117. package/dist/types/hook.js +6 -0
  118. package/dist/types/jwt.d.ts +75 -0
  119. package/dist/types/jwt.js +4 -0
  120. package/dist/types/logger.d.ts +59 -0
  121. package/dist/types/logger.js +6 -0
  122. package/dist/types/plugin.d.ts +16 -0
  123. package/dist/types/plugin.js +6 -0
  124. package/dist/types/redis.d.ts +71 -0
  125. package/dist/types/redis.js +4 -0
  126. package/{types/roleApisCache.ts → dist/types/roleApisCache.d.ts} +0 -2
  127. package/dist/types/roleApisCache.js +8 -0
  128. package/dist/types/sync.d.ts +92 -0
  129. package/dist/types/sync.js +4 -0
  130. package/dist/types/table.d.ts +34 -0
  131. package/dist/types/table.js +4 -0
  132. package/dist/types/validate.d.ts +67 -0
  133. package/dist/types/validate.js +4 -0
  134. package/dist/utils/calcPerfTime.d.ts +4 -0
  135. package/{utils/calcPerfTime.ts → dist/utils/calcPerfTime.js} +3 -3
  136. package/dist/utils/convertBigIntFields.d.ts +11 -0
  137. package/{utils/convertBigIntFields.ts → dist/utils/convertBigIntFields.js} +5 -9
  138. package/dist/utils/cors.d.ts +8 -0
  139. package/{utils/cors.ts → dist/utils/cors.js} +1 -3
  140. package/dist/utils/disableMenusGlob.d.ts +13 -0
  141. package/{utils/disableMenusGlob.ts → dist/utils/disableMenusGlob.js} +9 -29
  142. package/dist/utils/fieldClear.d.ts +11 -0
  143. package/{utils/fieldClear.ts → dist/utils/fieldClear.js} +15 -33
  144. package/dist/utils/getClientIp.d.ts +6 -0
  145. package/{utils/getClientIp.ts → dist/utils/getClientIp.js} +1 -7
  146. package/dist/utils/importDefault.d.ts +1 -0
  147. package/dist/utils/importDefault.js +29 -0
  148. package/dist/utils/isDirentDirectory.d.ts +2 -0
  149. package/{utils/isDirentDirectory.ts → dist/utils/isDirentDirectory.js} +3 -8
  150. package/dist/utils/loadMenuConfigs.d.ts +29 -0
  151. package/{utils/loadMenuConfigs.ts → dist/utils/loadMenuConfigs.js} +66 -52
  152. package/dist/utils/mergeAndConcat.d.ts +7 -0
  153. package/dist/utils/mergeAndConcat.js +72 -0
  154. package/dist/utils/processAtSymbol.d.ts +4 -0
  155. package/{utils/processFields.ts → dist/utils/processAtSymbol.js} +5 -9
  156. package/dist/utils/processInfo.d.ts +24 -0
  157. package/{utils/process.ts → dist/utils/processInfo.js} +2 -18
  158. package/dist/utils/response.d.ts +20 -0
  159. package/{utils/response.ts → dist/utils/response.js} +28 -49
  160. package/dist/utils/scanAddons.d.ts +17 -0
  161. package/{utils/scanAddons.ts → dist/utils/scanAddons.js} +7 -41
  162. package/dist/utils/scanConfig.d.ts +26 -0
  163. package/{utils/scanConfig.ts → dist/utils/scanConfig.js} +28 -66
  164. package/dist/utils/scanCoreBuiltins.d.ts +3 -0
  165. package/dist/utils/scanCoreBuiltins.js +65 -0
  166. package/dist/utils/scanFiles.d.ts +30 -0
  167. package/{utils/scanFiles.ts → dist/utils/scanFiles.js} +44 -71
  168. package/dist/utils/scanSources.d.ts +10 -0
  169. package/dist/utils/scanSources.js +46 -0
  170. package/dist/utils/sortModules.d.ts +28 -0
  171. package/{utils/sortModules.ts → dist/utils/sortModules.js} +26 -66
  172. package/dist/utils/util.d.ts +84 -0
  173. package/dist/utils/util.js +262 -0
  174. package/package.json +26 -34
  175. package/.gitignore +0 -0
  176. package/bunfig.toml +0 -3
  177. package/checks/checkHook.ts +0 -48
  178. package/checks/checkPlugin.ts +0 -48
  179. package/configs/presetRegexp.ts +0 -225
  180. package/docs/README.md +0 -98
  181. package/docs/api/api.md +0 -1921
  182. package/docs/guide/examples.md +0 -926
  183. package/docs/guide/quickstart.md +0 -354
  184. package/docs/hooks/auth.md +0 -38
  185. package/docs/hooks/cors.md +0 -28
  186. package/docs/hooks/hook.md +0 -838
  187. package/docs/hooks/parser.md +0 -19
  188. package/docs/hooks/rateLimit.md +0 -47
  189. package/docs/infra/redis.md +0 -628
  190. package/docs/plugins/cipher.md +0 -61
  191. package/docs/plugins/database.md +0 -189
  192. package/docs/plugins/plugin.md +0 -986
  193. package/docs/reference/addon.md +0 -510
  194. package/docs/reference/config.md +0 -573
  195. package/docs/reference/logger.md +0 -495
  196. package/docs/reference/sync.md +0 -478
  197. package/docs/reference/table.md +0 -763
  198. package/docs/reference/validator.md +0 -620
  199. package/lib/asyncContext.ts +0 -43
  200. package/lib/logger.ts +0 -811
  201. package/loader/loadHooks.ts +0 -51
  202. package/plugins/config.ts +0 -13
  203. package/plugins/jwt.ts +0 -15
  204. package/router/api.ts +0 -130
  205. package/tsconfig.json +0 -8
  206. package/types/database.d.ts +0 -541
  207. package/types/hook.d.ts +0 -25
  208. package/types/jwt.d.ts +0 -118
  209. package/types/logger.d.ts +0 -65
  210. package/types/plugin.d.ts +0 -19
  211. package/types/redis.d.ts +0 -83
  212. package/types/sync.d.ts +0 -398
  213. package/types/table.d.ts +0 -216
  214. package/types/validate.d.ts +0 -69
  215. package/utils/arrayKeysToCamel.ts +0 -18
  216. package/utils/configTypes.ts +0 -3
  217. package/utils/genShortId.ts +0 -12
  218. package/utils/importDefault.ts +0 -21
  219. package/utils/keysToCamel.ts +0 -22
  220. package/utils/keysToSnake.ts +0 -22
  221. package/utils/pickFields.ts +0 -19
  222. package/utils/scanSources.ts +0 -64
  223. package/utils/sqlLog.ts +0 -37
@@ -1,48 +0,0 @@
1
- import { isPlainObject } from "es-toolkit/compat";
2
- import { omit } from "es-toolkit/object";
3
-
4
- import { Logger } from "../lib/logger.ts";
5
-
6
- export async function checkPlugin(plugins: any[]): Promise<void> {
7
- let hasError = false;
8
-
9
- for (const plugin of plugins) {
10
- try {
11
- if (!isPlainObject(plugin)) {
12
- Logger.warn(omit(plugin, ["handler"]), "插件导出必须是对象(export default { deps, handler })");
13
- hasError = true;
14
- continue;
15
- }
16
-
17
- if (!Array.isArray((plugin as any).deps)) {
18
- Logger.warn(omit(plugin, ["handler"]), "插件的 deps 属性必须是字符串数组");
19
- hasError = true;
20
- continue;
21
- }
22
-
23
- if ((plugin as any).deps.some((depItem: any) => typeof depItem !== "string")) {
24
- Logger.warn(omit(plugin, ["handler"]), "插件的 deps 属性必须是字符串数组");
25
- hasError = true;
26
- }
27
-
28
- if (typeof (plugin as any).handler !== "function") {
29
- Logger.warn(omit(plugin, ["handler"]), "插件的 handler 属性必须是函数");
30
- hasError = true;
31
- continue;
32
- }
33
- } catch (error: any) {
34
- Logger.error(
35
- {
36
- err: error,
37
- item: plugin
38
- },
39
- "插件解析失败"
40
- );
41
- hasError = true;
42
- }
43
- }
44
-
45
- if (hasError) {
46
- throw new Error("插件结构检查失败");
47
- }
48
- }
@@ -1,225 +0,0 @@
1
- /**
2
- * 内置正则表达式别名
3
- * 用于表单验证和数据校验
4
- * 命名规范:小驼峰格式
5
- */
6
- export const RegexAliases = {
7
- // ============================================
8
- // 数字类型
9
- // ============================================
10
- /** 正整数(不含0) */
11
- number: "^\\d+$",
12
- /** 整数(含负数) */
13
- integer: "^-?\\d+$",
14
- /** 浮点数 */
15
- float: "^-?\\d+(\\.\\d+)?$",
16
- /** 正整数(不含0) */
17
- positive: "^[1-9]\\d*$",
18
- /** 负整数 */
19
- negative: "^-\\d+$",
20
- /** 零 */
21
- zero: "^0$",
22
-
23
- // ============================================
24
- // 字符串类型
25
- // ============================================
26
- /** 纯字母 */
27
- word: "^[a-zA-Z]+$",
28
- /** 字母和数字 */
29
- alphanumeric: "^[a-zA-Z0-9]+$",
30
- /** 字母、数字和下划线 */
31
- alphanumeric_: "^[a-zA-Z0-9_]+$",
32
- /** 字母、数字、下划线和短横线 */
33
- alphanumericDash_: "^[a-zA-Z0-9_-]+$",
34
- /** 小写字母 */
35
- lowercase: "^[a-z]+$",
36
- /** 大写字母 */
37
- uppercase: "^[A-Z]+$",
38
-
39
- // ============================================
40
- // 中文
41
- // ============================================
42
- /** 纯中文 */
43
- chinese: "^[\\u4e00-\\u9fa5]+$",
44
- /** 中文和字母 */
45
- chineseWord: "^[\\u4e00-\\u9fa5a-zA-Z]+$",
46
-
47
- // ============================================
48
- // 常用格式
49
- // ============================================
50
- /** 邮箱地址 */
51
- email: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
52
- /** 中国大陆手机号 */
53
- phone: "^1[3-9]\\d{9}$",
54
- /** 固定电话(区号-号码) */
55
- telephone: "^0\\d{2,3}-?\\d{7,8}$",
56
- /** URL 地址 */
57
- url: "^https?://",
58
- /** IPv4 地址 */
59
- ip: "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$",
60
- /** IPv6 地址 */
61
- ipv6: "^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$",
62
- /** 域名 */
63
- domain: "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$",
64
-
65
- // ============================================
66
- // 特殊格式
67
- // ============================================
68
- /** UUID */
69
- uuid: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
70
- /** 十六进制字符串 */
71
- hex: "^[0-9a-fA-F]+$",
72
- /** Base64 编码 */
73
- base64: "^[A-Za-z0-9+/=]+$",
74
- /** MD5 哈希 */
75
- md5: "^[a-f0-9]{32}$",
76
- /** SHA1 哈希 */
77
- sha1: "^[a-f0-9]{40}$",
78
- /** SHA256 哈希 */
79
- sha256: "^[a-f0-9]{64}$",
80
-
81
- // ============================================
82
- // 日期时间
83
- // ============================================
84
- /** 日期 YYYY-MM-DD */
85
- date: "^\\d{4}-\\d{2}-\\d{2}$",
86
- /** 时间 HH:MM:SS */
87
- time: "^\\d{2}:\\d{2}:\\d{2}$",
88
- /** ISO 日期时间 */
89
- datetime: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}",
90
- /** 年份 */
91
- year: "^\\d{4}$",
92
- /** 月份 01-12 */
93
- month: "^(0[1-9]|1[0-2])$",
94
- /** 日期 01-31 */
95
- day: "^(0[1-9]|[12]\\d|3[01])$",
96
-
97
- // ============================================
98
- // 代码相关
99
- // ============================================
100
- /** 变量名 */
101
- variable: "^[a-zA-Z_][a-zA-Z0-9_]*$",
102
- /** 常量名(全大写) */
103
- constant: "^[A-Z][A-Z0-9_]*$",
104
- /** 包名(小写+连字符) */
105
- package: "^[a-z][a-z0-9-]*$",
106
-
107
- // ============================================
108
- // 证件相关
109
- // ============================================
110
- /** 中国身份证号(18位) */
111
- idCard: "^\\d{17}[\\dXx]$",
112
- /** 护照号 */
113
- passport: "^[a-zA-Z0-9]{5,17}$",
114
-
115
- // ============================================
116
- // 账号相关(国内常用)
117
- // ============================================
118
- /** 银行卡号(16-19位数字) */
119
- bankCard: "^\\d{16,19}$",
120
- /** 微信号(6-20位,字母开头,可包含字母、数字、下划线、减号) */
121
- wechat: "^[a-zA-Z][a-zA-Z0-9_-]{5,19}$",
122
- /** QQ号(5-11位数字,首位非0) */
123
- qq: "^[1-9]\\d{4,10}$",
124
- /** 支付宝账号(手机号或邮箱) */
125
- alipay: "^(1[3-9]\\d{9}|[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})$",
126
- /** 用户名(4-20位,字母开头,可包含字母、数字、下划线) */
127
- username: "^[a-zA-Z][a-zA-Z0-9_]{3,19}$",
128
- /** 昵称(2-20位,支持中文、字母、数字) */
129
- nickname: "^[\\u4e00-\\u9fa5a-zA-Z0-9]{2,20}$",
130
-
131
- // ============================================
132
- // 密码强度
133
- // ============================================
134
- /** 弱密码(至少6位) */
135
- passwordWeak: "^.{6,}$",
136
- /** 中等密码(至少8位,包含字母和数字) */
137
- passwordMedium: "^(?=.*[a-zA-Z])(?=.*\\d).{8,}$",
138
- /** 强密码(至少8位,包含大小写字母、数字和特殊字符) */
139
- passwordStrong: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*]).{8,}$",
140
-
141
- // ============================================
142
- // 其他常用
143
- // ============================================
144
- /** 车牌号(新能源+普通) */
145
- licensePlate: "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$",
146
- /** 邮政编码 */
147
- postalCode: "^\\d{6}$",
148
- /** 版本号(语义化版本) */
149
- semver: "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.]+)?(\\+[a-zA-Z0-9.]+)?$",
150
- /** 颜色值(十六进制) */
151
- colorHex: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
152
-
153
- // ============================================
154
- // 空值
155
- // ============================================
156
- /** 空字符串 */
157
- empty: "^$",
158
- /** 非空 */
159
- notempty: ".+"
160
- } as const;
161
-
162
- /**
163
- * 正则别名类型
164
- */
165
- export type RegexAliasName = keyof typeof RegexAliases;
166
-
167
- // ============================================
168
- // 正则表达式缓存(性能优化)
169
- // ============================================
170
- const regexCache = new Map<string, RegExp>();
171
-
172
- /**
173
- * 获取正则表达式字符串
174
- * @param name 正则别名(以 @ 开头)或自定义正则字符串
175
- * @returns 正则表达式字符串
176
- */
177
- export function getRegex(name: string): string {
178
- if (name.startsWith("@")) {
179
- const alias = name.slice(1) as RegexAliasName;
180
- return RegexAliases[alias] || name;
181
- }
182
- return name;
183
- }
184
-
185
- /**
186
- * 获取编译后的正则表达式对象(带缓存)
187
- * @param pattern 正则别名或正则字符串
188
- * @param flags 正则标志(如 'i', 'g')
189
- * @returns 编译后的 RegExp 对象
190
- */
191
- export function getCompiledRegex(pattern: string, flags?: string): RegExp {
192
- const regexStr = getRegex(pattern);
193
- const cacheKey = `${regexStr}:${flags || ""}`;
194
-
195
- let cached = regexCache.get(cacheKey);
196
- if (!cached) {
197
- cached = new RegExp(regexStr, flags);
198
- regexCache.set(cacheKey, cached);
199
- }
200
- return cached;
201
- }
202
-
203
- /**
204
- * 验证值是否匹配正则(使用缓存)
205
- * @param value 要验证的值
206
- * @param pattern 正则别名或正则字符串
207
- * @returns 是否匹配
208
- */
209
- export function matchRegex(value: string, pattern: string): boolean {
210
- return getCompiledRegex(pattern).test(value);
211
- }
212
-
213
- /**
214
- * 清除正则缓存
215
- */
216
- export function clearRegexCache(): void {
217
- regexCache.clear();
218
- }
219
-
220
- /**
221
- * 获取缓存大小
222
- */
223
- export function getRegexCacheSize(): number {
224
- return regexCache.size;
225
- }
package/docs/README.md DELETED
@@ -1,98 +0,0 @@
1
- # Befly Core 文档
2
-
3
- > Befly 是基于 Bun 的高性能 API 框架
4
-
5
- ## 文档原则
6
-
7
- - 文档只描述**当前实现**:不提供迁移指引、不保留兼容说明、不出现“已迁移/跳转页/占位页”。
8
- - 如文档与代码行为不一致:**以代码为准**,应直接修正文档。
9
- - 规则以“可执行/可验证”为标准:给出明确约束(例如 pathname-only、严格校验规则),避免含糊表述。
10
-
11
- ## 快速开始
12
-
13
- - [Quickstart 快速入门](./guide/quickstart.md) - 5 分钟搭建第一个 API 服务
14
-
15
- ## 核心概念
16
-
17
- | 文档 | 说明 |
18
- | ---------------------------------------- | --------------------------------------------------------------------- |
19
- | [API 开发](./api/api.md) | API 定义、字段验证、权限控制([强约束清单](./api/api.md#强约束清单)) |
20
- | [Table 表结构](./reference/table.md) | JSON 表定义格式、字段类型 |
21
- | [Database 数据库](./plugins/database.md) | CRUD 操作、事务、批量操作 |
22
- | [Config 配置](./reference/config.md) | 配置文件、环境分离 |
23
-
24
- ## 扩展开发
25
-
26
- | 文档 | 说明 |
27
- | ------------------------------------ | -------------- |
28
- | [Plugin 插件](./plugins/plugin.md) | 自定义插件开发 |
29
- | [Hook 钩子](./hooks/hook.md) | 请求处理钩子 |
30
- | [Addon 插件包](./reference/addon.md) | 可复用功能模块 |
31
-
32
- 常用内置 Hook:
33
-
34
- - [cors Hook](./hooks/cors.md)
35
- - [auth Hook](./hooks/auth.md)
36
- - [parser Hook](./hooks/parser.md)
37
- - [rateLimit Hook](./hooks/rateLimit.md)
38
-
39
- ## 工具系统
40
-
41
- | 文档 | 说明 |
42
- | ------------------------------------------ | ------------------ |
43
- | [Validator 验证](./reference/validator.md) | 参数验证、正则别名 |
44
- | [Logger 日志](./reference/logger.md) | 日志系统配置 |
45
- | [Cipher 加密](./plugins/cipher.md) | 哈希、签名、JWT |
46
- | [Redis 缓存](./infra/redis.md) | Redis 操作 |
47
-
48
- ## 命令工具
49
-
50
- | 文档 | 说明 |
51
- | -------------------------------- | --------------------------------------------------------------------- |
52
- | [Sync 同步](./reference/sync.md) | 数据库、API、菜单同步([强约束清单](./reference/sync.md#强约束清单)) |
53
-
54
- ## 实战示例
55
-
56
- - [Examples 实战示例](./guide/examples.md) - 用户管理、文章管理、文件上传完整示例
57
-
58
- ## 文档索引
59
-
60
- ### 入门篇
61
-
62
- 1. **[Quickstart](./guide/quickstart.md)** - 环境准备、项目创建、第一个 API
63
-
64
- ### 开发篇
65
-
66
- 2. **[API](./api/api.md)** - API 路由定义、字段验证、权限控制、响应格式([强约束清单](./api/api.md#强约束清单))
67
- 3. **[Table](./reference/table.md)** - 表定义格式、字段类型、系统字段、命名规范
68
- 4. **[Database](./plugins/database.md)** - 数据库连接、CRUD 操作、事务处理、批量操作
69
- 5. **[Config](./reference/config.md)** - 配置文件结构、环境分离、运行时配置
70
-
71
- ### 扩展篇
72
-
73
- 6. **[Plugin](./plugins/plugin.md)** - 插件生命周期、依赖管理、内置插件
74
- 7. **[Hook](./hooks/hook.md)** - 钩子执行顺序、洋葱模型、内置钩子
75
- 8. **[Addon](./reference/addon.md)** - Addon 结构、创建发布、命名规范
76
-
77
- ### 工具篇
78
-
79
- 9. **[Validator](./reference/validator.md)** - 验证规则、类型转换、正则别名
80
- 10. **[Logger](./reference/logger.md)** - 日志级别、文件轮转、测试 Mock
81
- 11. **[Cipher](./plugins/cipher.md)** - 哈希算法、HMAC 签名、密码加密、JWT 令牌
82
- 12. **[Redis](./infra/redis.md)** - 缓存操作、键值存储、过期管理
83
-
84
- ### 运维篇
85
-
86
- 13. **[Sync](./reference/sync.md)** - syncTable、syncApi、syncMenu、syncDev、syncCache([强约束清单](./reference/sync.md#强约束清单))
87
-
88
- ## 常用链接
89
-
90
- - [GitHub](https://github.com/chenbimo/befly)
91
- - [npm](https://www.npmjs.com/package/befly)
92
-
93
- ## 版本信息
94
-
95
- - Befly Core: 1.x
96
- - 运行时: Bun >= 1.0
97
- - 数据库: MySQL >= 8.0
98
- - 缓存: Redis >= 6.0