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,61 +0,0 @@
1
- # Cipher 加密工具
2
-
3
- > 哈希、签名、密码加密与 JWT 令牌
4
-
5
- ## 目录
6
-
7
- - [概述](#概述)
8
- - [Cipher 加密类](#cipher-加密类)
9
- - [JWT 令牌](#jwt-令牌)
10
- - [插件集成](#插件集成)
11
- - [FAQ](#faq)
12
-
13
- ---
14
-
15
- ## 概述
16
-
17
- Befly 提供两个安全相关的工具:
18
-
19
- | 工具 | 说明 | 典型场景 |
20
- | -------- | ---------- | ------------------------ |
21
- | `Cipher` | 加密工具类 | 数据哈希、签名、密码加密 |
22
- | `Jwt` | JWT 令牌类 | 用户认证、API 授权 |
23
-
24
- ---
25
-
26
- ## Cipher 加密类
27
-
28
- `Cipher` 提供:
29
-
30
- - 哈希:`md5/sha1/sha256/sha384/sha512/blake2b*`
31
- - HMAC:`hmacSha256` 等
32
- - 密码:`hashPassword`(bcrypt)与 `verifyPassword`
33
- - 辅助:Base64、随机串、文件哈希、fastHash
34
-
35
- ---
36
-
37
- ## JWT 令牌
38
-
39
- `Jwt` 用于签发与验证 JWT:
40
-
41
- - `sign(payload, options?)`
42
- - `verify(token, options?)`
43
- - `decode(token, full?)`
44
-
45
- JWT 插件会读取配置文件中的 `auth` 配置(如 secret / expiresIn / algorithm)。
46
-
47
- ---
48
-
49
- ## 插件集成
50
-
51
- 在 API handler 中一般直接使用:
52
-
53
- - `befly.cipher.*`
54
- - `befly.jwt.*`
55
-
56
- ---
57
-
58
- ## FAQ
59
-
60
- - 密码存储应使用 `hashPassword`(bcrypt),不要用 MD5/SHA\* 直接存密码。
61
- - 生产环境必须替换 `auth.secret` 为强随机字符串。
@@ -1,189 +0,0 @@
1
- # Befly 数据库(DbHelper)
2
-
3
- 本文档只描述 **当前实现**:所有数据库操作统一返回 `DbResult`(`{ data, sql }`),调用方必须读取 `.data`。
4
-
5
- ## 核心约定:DbResult(必须读 data)
6
-
7
- `DbHelper` 的所有方法都会返回:
8
-
9
- - `data`:你真正要用的结果
10
- - `sql`:本次执行的 SQL 信息(用于调试/排错)
11
-
12
- ```js
13
- type DbResult<TData = any, TSql = SqlInfo> = {
14
- data: TData;
15
- sql: TSql;
16
- };
17
-
18
- ```
19
-
20
- ### SQL 信息(SqlInfo / ListSql)
21
-
22
- - 单条/写入类操作的 `sql` 为 `SqlInfo`:
23
- - `sql`:SQL 字符串
24
- - `params`:参数数组
25
- - `duration`:耗时(毫秒)
26
- - 列表/全量查询的 `sql` 为 `ListSql`:
27
- - `count`:统计 SQL(用于 total)
28
- - `data?`:数据 SQL(当 total=0 时可能不会执行第二次查询)
29
-
30
- > 注意:不要把整个 `DbResult` 直接返回给客户端;应只返回 `result.data`。
31
-
32
- ## 常用查询
33
-
34
- ### getOne(单条)
35
-
36
- ```typescript
37
- const userRes = await befly.db.getOne({
38
- table: "user",
39
- fields: ["id", "email", "nickname"],
40
- where: { id: ctx.user?.id }
41
- });
42
-
43
- const user = userRes.data;
44
- if (!user?.id) {
45
- return befly.tool.No("用户不存在");
46
- }
47
-
48
- return befly.tool.Yes("获取成功", user);
49
- ```
50
-
51
- ### getList(分页)
52
-
53
- ```typescript
54
- const listRes = await befly.db.getList({
55
- table: "user",
56
- fields: ["id", "email", "nickname"],
57
- where: { state: 1 },
58
- page: 1,
59
- limit: 20,
60
- orderBy: ["id#DESC"]
61
- });
62
-
63
- return befly.tool.Yes("获取成功", listRes.data);
64
- // listRes.data: { lists, total, page, limit, pages }
65
- ```
66
-
67
- ### getAll(不分页,有上限保护)
68
-
69
- ```typescript
70
- const allRes = await befly.db.getAll({
71
- table: "user",
72
- fields: ["id", "email"],
73
- where: { state: 1 },
74
- orderBy: ["createdAt#DESC"]
75
- });
76
-
77
- return befly.tool.Yes("获取成功", allRes.data);
78
- // allRes.data: { lists, total }
79
- ```
80
-
81
- ## 写入与返回值
82
-
83
- ### insData(插入单条)
84
-
85
- `insData` 返回插入的 ID(数值):
86
-
87
- ```typescript
88
- const idRes = await befly.db.insData({
89
- table: "user",
90
- data: {
91
- email: ctx.body.email,
92
- nickname: ctx.body.nickname
93
- }
94
- });
95
-
96
- return befly.tool.Yes("创建成功", { id: idRes.data });
97
- ```
98
-
99
- ### updData / delData
100
-
101
- `updData` / `delData` 返回影响行数(数值):
102
-
103
- ```typescript
104
- const updRes = await befly.db.updData({
105
- table: "user",
106
- data: { nickname: ctx.body.nickname },
107
- where: { id: ctx.user?.id }
108
- });
109
-
110
- return befly.tool.Yes("更新成功", { changed: updRes.data });
111
- ```
112
-
113
- ### insBatch(批量插入)
114
-
115
- `insBatch` 返回插入的 ID 列表:
116
-
117
- ```typescript
118
- const idsRes = await befly.db.insBatch("user", [
119
- { email: "a@qq.com", nickname: "A" },
120
- { email: "b@qq.com", nickname: "B" }
121
- ]);
122
-
123
- return befly.tool.Yes("导入成功", { ids: idsRes.data });
124
- ```
125
-
126
- ## 字段/排序
127
-
128
- ### fields(字段选择)
129
-
130
- - 不传或 `[]`:查询所有字段
131
- - 仅包含字段:`["id", "email"]`
132
- - 仅排除字段:`["!password"]`
133
-
134
- > 禁止混用包含与排除。
135
-
136
- ### orderBy(排序)
137
-
138
- 格式:`"字段#ASC" | "字段#DESC"`,例如:`["id#DESC"]`。
139
-
140
- ## null/undefined 自动过滤
141
-
142
- DbHelper 在写入(`insData/insBatch/updData`)以及查询条件(`where`)中,会自动过滤 `null/undefined`。
143
-
144
- 如果你希望在业务侧更精细控制(例如:保留 `0` / 空字符串),请使用 `fieldClear`:
145
-
146
- ```typescript
147
- import { fieldClear } from "befly/utils/fieldClear";
148
-
149
- const data = fieldClear(
150
- { nickname: ctx.body.nickname, sort: ctx.body.sort, state: ctx.body.state },
151
- { excludeValues: [null, undefined], keepMap: { sort: 0, state: 0 } }
152
- );
153
- ```
154
-
155
- ## 事务(trans)
156
-
157
- ````typescript
158
- const out = await befly.db.trans(async (trx) => {
159
- const idRes = await trx.insData({
160
- table: "order",
161
- data: { userId: ctx.user?.id, status: "pending" }
162
- });
163
- return { orderId: idRes.data };
164
- });
165
-
166
- return befly.tool.Yes("创建成功", out);
167
-
168
- ## 原生 SQL(query / unsafe)
169
-
170
- ```typescript
171
- const r = await befly.db.query("SELECT 1 AS cnt");
172
- return befly.tool.Yes("ok", r.data);
173
- ````
174
-
175
- `unsafe` 用于内部脚本/同步逻辑(行为与 `query` 相同,返回 `DbResult`)。
176
-
177
- ## 错误定位:error.sqlInfo
178
-
179
- 当 SQL 执行失败,抛出的错误对象会带 `sqlInfo`:
180
-
181
- ```typescript
182
- try {
183
- await befly.db.query("SELECT * FROM not_exists");
184
- } catch (error: any) {
185
- // error.sqlInfo: { sql, params, duration }
186
- befly.logger.error({ sqlInfo: error?.sqlInfo }, "SQL 执行失败");
187
- throw error;
188
- }
189
- ```