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.
- package/README.md +83 -307
- package/dist/befly.config.d.ts +7 -0
- package/{befly.config.ts → dist/befly.config.js} +11 -36
- package/dist/befly.js +15621 -0
- package/dist/befly.min.js +21 -0
- package/dist/checks/checkApi.d.ts +1 -0
- package/{checks/checkApi.ts → dist/checks/checkApi.js} +12 -30
- package/dist/checks/checkHook.d.ts +1 -0
- package/dist/checks/checkHook.js +86 -0
- package/dist/checks/checkMenu.d.ts +7 -0
- package/{checks/checkMenu.ts → dist/checks/checkMenu.js} +18 -53
- package/dist/checks/checkPlugin.d.ts +1 -0
- package/dist/checks/checkPlugin.js +86 -0
- package/dist/checks/checkTable.d.ts +6 -0
- package/{checks/checkTable.ts → dist/checks/checkTable.js} +17 -41
- package/dist/configs/presetFields.d.ts +4 -0
- package/{configs/presetFields.ts → dist/configs/presetFields.js} +1 -1
- package/dist/configs/presetRegexp.d.ts +145 -0
- package/{utils/regex.ts → dist/configs/presetRegexp.js} +8 -31
- package/dist/hooks/auth.d.ts +7 -0
- package/{hooks/auth.ts → dist/hooks/auth.js} +8 -10
- package/dist/hooks/cors.d.ts +11 -0
- package/{hooks/cors.ts → dist/hooks/cors.js} +5 -13
- package/dist/hooks/parser.d.ts +14 -0
- package/{hooks/parser.ts → dist/hooks/parser.js} +31 -45
- package/dist/hooks/permission.d.ts +14 -0
- package/{hooks/permission.ts → dist/hooks/permission.js} +16 -25
- package/dist/hooks/validator.d.ts +11 -0
- package/{hooks/validator.ts → dist/hooks/validator.js} +9 -14
- package/dist/index.d.ts +26 -0
- package/{main.ts → dist/index.js} +61 -100
- package/dist/lib/asyncContext.d.ts +21 -0
- package/dist/lib/asyncContext.js +27 -0
- package/dist/lib/cacheHelper.d.ts +95 -0
- package/{lib/cacheHelper.ts → dist/lib/cacheHelper.js} +45 -105
- package/dist/lib/cacheKeys.d.ts +23 -0
- package/{lib/cacheKeys.ts → dist/lib/cacheKeys.js} +5 -10
- package/dist/lib/cipher.d.ts +153 -0
- package/{lib/cipher.ts → dist/lib/cipher.js} +23 -44
- package/dist/lib/connect.d.ts +91 -0
- package/{lib/connect.ts → dist/lib/connect.js} +47 -88
- package/dist/lib/dbDialect.d.ts +87 -0
- package/{lib/dbDialect.ts → dist/lib/dbDialect.js} +32 -112
- package/dist/lib/dbHelper.d.ts +204 -0
- package/{lib/dbHelper.ts → dist/lib/dbHelper.js} +82 -241
- package/dist/lib/dbUtils.d.ts +68 -0
- package/{lib/dbUtils.ts → dist/lib/dbUtils.js} +51 -126
- package/dist/lib/jwt.d.ts +13 -0
- package/{lib/jwt.ts → dist/lib/jwt.js} +11 -32
- package/dist/lib/logger.d.ts +42 -0
- package/dist/lib/logger.js +1144 -0
- package/dist/lib/redisHelper.d.ts +185 -0
- package/{lib/redisHelper.ts → dist/lib/redisHelper.js} +97 -141
- package/dist/lib/sqlBuilder.d.ts +160 -0
- package/{lib/sqlBuilder.ts → dist/lib/sqlBuilder.js} +132 -278
- package/dist/lib/sqlCheck.d.ts +23 -0
- package/{lib/sqlCheck.ts → dist/lib/sqlCheck.js} +24 -41
- package/dist/lib/validator.d.ts +45 -0
- package/{lib/validator.ts → dist/lib/validator.js} +44 -61
- package/dist/loader/loadApis.d.ts +12 -0
- package/{loader/loadApis.ts → dist/loader/loadApis.js} +10 -20
- package/dist/loader/loadHooks.d.ts +7 -0
- package/dist/loader/loadHooks.js +35 -0
- package/dist/loader/loadPlugins.d.ts +8 -0
- package/{loader/loadPlugins.ts → dist/loader/loadPlugins.js} +14 -26
- package/dist/paths.d.ts +93 -0
- package/{paths.ts → dist/paths.js} +6 -19
- package/dist/plugins/cache.d.ts +16 -0
- package/{plugins/cache.ts → dist/plugins/cache.js} +7 -12
- package/dist/plugins/cipher.d.ts +12 -0
- package/{plugins/cipher.ts → dist/plugins/cipher.js} +4 -6
- package/dist/plugins/config.d.ts +12 -0
- package/dist/plugins/config.js +8 -0
- package/dist/plugins/db.d.ts +16 -0
- package/{plugins/db.ts → dist/plugins/db.js} +11 -17
- package/dist/plugins/jwt.d.ts +12 -0
- package/dist/plugins/jwt.js +12 -0
- package/dist/plugins/logger.d.ts +32 -0
- package/{plugins/logger.ts → dist/plugins/logger.js} +5 -8
- package/dist/plugins/redis.d.ts +16 -0
- package/{plugins/redis.ts → dist/plugins/redis.js} +9 -12
- package/dist/plugins/tool.d.ts +81 -0
- package/{plugins/tool.ts → dist/plugins/tool.js} +9 -30
- package/dist/router/api.d.ts +14 -0
- package/dist/router/api.js +107 -0
- package/dist/router/static.d.ts +9 -0
- package/{router/static.ts → dist/router/static.js} +20 -34
- package/dist/scripts/ensureDist.d.ts +1 -0
- package/dist/scripts/ensureDist.js +296 -0
- package/dist/sync/syncApi.d.ts +3 -0
- package/{sync/syncApi.ts → dist/sync/syncApi.js} +35 -55
- package/dist/sync/syncCache.d.ts +2 -0
- package/{sync/syncCache.ts → dist/sync/syncCache.js} +1 -6
- package/dist/sync/syncDev.d.ts +6 -0
- package/{sync/syncDev.ts → dist/sync/syncDev.js} +29 -62
- package/dist/sync/syncMenu.d.ts +14 -0
- package/{sync/syncMenu.ts → dist/sync/syncMenu.js} +65 -125
- package/dist/sync/syncTable.d.ts +151 -0
- package/{sync/syncTable.ts → dist/sync/syncTable.js} +172 -379
- package/{types → dist/types}/api.d.ts +12 -51
- package/dist/types/api.js +4 -0
- package/{types → dist/types}/befly.d.ts +32 -227
- package/dist/types/befly.js +4 -0
- package/{types → dist/types}/cache.d.ts +7 -15
- package/dist/types/cache.js +4 -0
- package/dist/types/cipher.d.ts +27 -0
- package/dist/types/cipher.js +7 -0
- package/{types → dist/types}/common.d.ts +8 -33
- package/dist/types/common.js +5 -0
- package/{types → dist/types}/context.d.ts +3 -5
- package/dist/types/context.js +4 -0
- package/{types → dist/types}/crypto.d.ts +0 -3
- package/dist/types/crypto.js +4 -0
- package/dist/types/database.d.ts +138 -0
- package/dist/types/database.js +4 -0
- package/dist/types/hook.d.ts +17 -0
- package/dist/types/hook.js +6 -0
- package/dist/types/jwt.d.ts +75 -0
- package/dist/types/jwt.js +4 -0
- package/dist/types/logger.d.ts +59 -0
- package/dist/types/logger.js +6 -0
- package/dist/types/plugin.d.ts +16 -0
- package/dist/types/plugin.js +6 -0
- package/dist/types/redis.d.ts +71 -0
- package/dist/types/redis.js +4 -0
- package/{types/roleApisCache.ts → dist/types/roleApisCache.d.ts} +0 -2
- package/dist/types/roleApisCache.js +8 -0
- package/dist/types/sync.d.ts +92 -0
- package/dist/types/sync.js +4 -0
- package/dist/types/table.d.ts +34 -0
- package/dist/types/table.js +4 -0
- package/dist/types/validate.d.ts +67 -0
- package/dist/types/validate.js +4 -0
- package/dist/utils/calcPerfTime.d.ts +4 -0
- package/{utils/calcPerfTime.ts → dist/utils/calcPerfTime.js} +3 -3
- package/dist/utils/convertBigIntFields.d.ts +11 -0
- package/{utils/convertBigIntFields.ts → dist/utils/convertBigIntFields.js} +5 -9
- package/dist/utils/cors.d.ts +8 -0
- package/{utils/cors.ts → dist/utils/cors.js} +1 -3
- package/dist/utils/disableMenusGlob.d.ts +13 -0
- package/{utils/disableMenusGlob.ts → dist/utils/disableMenusGlob.js} +9 -29
- package/dist/utils/fieldClear.d.ts +11 -0
- package/{utils/fieldClear.ts → dist/utils/fieldClear.js} +15 -33
- package/dist/utils/getClientIp.d.ts +6 -0
- package/{utils/getClientIp.ts → dist/utils/getClientIp.js} +1 -7
- package/dist/utils/importDefault.d.ts +1 -0
- package/dist/utils/importDefault.js +29 -0
- package/dist/utils/isDirentDirectory.d.ts +2 -0
- package/{utils/isDirentDirectory.ts → dist/utils/isDirentDirectory.js} +3 -8
- package/dist/utils/loadMenuConfigs.d.ts +29 -0
- package/{utils/loadMenuConfigs.ts → dist/utils/loadMenuConfigs.js} +66 -52
- package/dist/utils/mergeAndConcat.d.ts +7 -0
- package/dist/utils/mergeAndConcat.js +72 -0
- package/dist/utils/processAtSymbol.d.ts +4 -0
- package/{utils/processFields.ts → dist/utils/processAtSymbol.js} +5 -9
- package/dist/utils/processInfo.d.ts +24 -0
- package/{utils/process.ts → dist/utils/processInfo.js} +2 -18
- package/dist/utils/response.d.ts +20 -0
- package/{utils/response.ts → dist/utils/response.js} +28 -49
- package/dist/utils/scanAddons.d.ts +17 -0
- package/{utils/scanAddons.ts → dist/utils/scanAddons.js} +7 -41
- package/dist/utils/scanConfig.d.ts +26 -0
- package/{utils/scanConfig.ts → dist/utils/scanConfig.js} +28 -66
- package/dist/utils/scanCoreBuiltins.d.ts +3 -0
- package/dist/utils/scanCoreBuiltins.js +65 -0
- package/dist/utils/scanFiles.d.ts +30 -0
- package/{utils/scanFiles.ts → dist/utils/scanFiles.js} +44 -71
- package/dist/utils/scanSources.d.ts +10 -0
- package/dist/utils/scanSources.js +46 -0
- package/dist/utils/sortModules.d.ts +28 -0
- package/{utils/sortModules.ts → dist/utils/sortModules.js} +26 -66
- package/dist/utils/util.d.ts +84 -0
- package/dist/utils/util.js +262 -0
- package/package.json +26 -34
- package/.gitignore +0 -0
- package/bunfig.toml +0 -3
- package/checks/checkHook.ts +0 -48
- package/checks/checkPlugin.ts +0 -48
- package/configs/presetRegexp.ts +0 -225
- package/docs/README.md +0 -98
- package/docs/api/api.md +0 -1921
- package/docs/guide/examples.md +0 -926
- package/docs/guide/quickstart.md +0 -354
- package/docs/hooks/auth.md +0 -38
- package/docs/hooks/cors.md +0 -28
- package/docs/hooks/hook.md +0 -838
- package/docs/hooks/parser.md +0 -19
- package/docs/hooks/rateLimit.md +0 -47
- package/docs/infra/redis.md +0 -628
- package/docs/plugins/cipher.md +0 -61
- package/docs/plugins/database.md +0 -189
- package/docs/plugins/plugin.md +0 -986
- package/docs/reference/addon.md +0 -510
- package/docs/reference/config.md +0 -573
- package/docs/reference/logger.md +0 -495
- package/docs/reference/sync.md +0 -478
- package/docs/reference/table.md +0 -763
- package/docs/reference/validator.md +0 -620
- package/lib/asyncContext.ts +0 -43
- package/lib/logger.ts +0 -811
- package/loader/loadHooks.ts +0 -51
- package/plugins/config.ts +0 -13
- package/plugins/jwt.ts +0 -15
- package/router/api.ts +0 -130
- package/tsconfig.json +0 -8
- package/types/database.d.ts +0 -541
- package/types/hook.d.ts +0 -25
- package/types/jwt.d.ts +0 -118
- package/types/logger.d.ts +0 -65
- package/types/plugin.d.ts +0 -19
- package/types/redis.d.ts +0 -83
- package/types/sync.d.ts +0 -398
- package/types/table.d.ts +0 -216
- package/types/validate.d.ts +0 -69
- package/utils/arrayKeysToCamel.ts +0 -18
- package/utils/configTypes.ts +0 -3
- package/utils/genShortId.ts +0 -12
- package/utils/importDefault.ts +0 -21
- package/utils/keysToCamel.ts +0 -22
- package/utils/keysToSnake.ts +0 -22
- package/utils/pickFields.ts +0 -19
- package/utils/scanSources.ts +0 -64
- package/utils/sqlLog.ts +0 -37
|
@@ -2,41 +2,33 @@
|
|
|
2
2
|
* Befly 框架通用类型定义
|
|
3
3
|
* 框架核心通用类型定义
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
/**
|
|
7
6
|
* SQL 值类型
|
|
8
7
|
*/
|
|
9
|
-
export type SqlValue = string | number | boolean | null | Date;
|
|
10
|
-
|
|
8
|
+
export type SqlValue = string | number | boolean | null | Date | Record<string, any> | any[];
|
|
11
9
|
/**
|
|
12
10
|
* 通用键值对类型
|
|
13
11
|
*/
|
|
14
12
|
export type KeyValue<T = any> = Record<string, T>;
|
|
15
|
-
|
|
16
|
-
// ============================================
|
|
17
|
-
// SQL 查询相关类型
|
|
18
|
-
// ============================================
|
|
19
|
-
|
|
20
13
|
/**
|
|
21
14
|
* WHERE 条件操作符
|
|
22
15
|
*/
|
|
23
16
|
export type WhereOperator = "$eq" | "$ne" | "$not" | "$gt" | "$gte" | "$lt" | "$lte" | "$like" | "$notLike" | "$in" | "$notIn" | "$nin" | "$isNull" | "$isNotNull" | "$null" | "$notNull" | "$between" | "$notBetween";
|
|
24
|
-
|
|
25
17
|
/**
|
|
26
18
|
* WHERE 条件类型
|
|
27
19
|
*/
|
|
28
20
|
export type WhereConditions = Record<string, any>;
|
|
29
|
-
|
|
30
21
|
/**
|
|
31
22
|
* 排序方向
|
|
32
23
|
*/
|
|
33
24
|
export type OrderDirection = "ASC" | "DESC";
|
|
34
|
-
|
|
35
25
|
/**
|
|
36
26
|
* 排序字段
|
|
37
27
|
*/
|
|
38
|
-
export type OrderByField = string | {
|
|
39
|
-
|
|
28
|
+
export type OrderByField = string | {
|
|
29
|
+
field: string;
|
|
30
|
+
direction: OrderDirection;
|
|
31
|
+
};
|
|
40
32
|
/**
|
|
41
33
|
* SQL 查询结果
|
|
42
34
|
*/
|
|
@@ -44,26 +36,18 @@ export interface SqlQuery {
|
|
|
44
36
|
sql: string;
|
|
45
37
|
params: SqlValue[];
|
|
46
38
|
}
|
|
47
|
-
|
|
48
39
|
/**
|
|
49
40
|
* 插入数据类型
|
|
50
41
|
*/
|
|
51
42
|
export type InsertData = Record<string, SqlValue> | Record<string, SqlValue>[];
|
|
52
|
-
|
|
53
43
|
/**
|
|
54
44
|
* 更新数据类型
|
|
55
45
|
*/
|
|
56
46
|
export type UpdateData = Record<string, SqlValue>;
|
|
57
|
-
|
|
58
47
|
/**
|
|
59
48
|
* 任意对象类型
|
|
60
49
|
*/
|
|
61
50
|
export type AnyObject = Record<string, any>;
|
|
62
|
-
|
|
63
|
-
// ============================================
|
|
64
|
-
// Core 专用类型(不适合放在 shared 中的类型)
|
|
65
|
-
// ============================================
|
|
66
|
-
|
|
67
51
|
/**
|
|
68
52
|
* 字段规则字符串(已废弃,保留用于兼容)
|
|
69
53
|
* 格式: "字段名|类型|最小值|最大值|默认值|是否索引|正则约束"
|
|
@@ -74,7 +58,6 @@ export type AnyObject = Record<string, any>;
|
|
|
74
58
|
* "年龄|number|0|150|18|0|null"
|
|
75
59
|
*/
|
|
76
60
|
export type FieldRule = string;
|
|
77
|
-
|
|
78
61
|
/**
|
|
79
62
|
* 解析后的字段规则(已废弃,保留用于兼容)
|
|
80
63
|
*
|
|
@@ -89,17 +72,14 @@ export interface ParsedFieldRule {
|
|
|
89
72
|
index: 0 | 1;
|
|
90
73
|
regex: string | null;
|
|
91
74
|
}
|
|
92
|
-
|
|
93
75
|
/**
|
|
94
76
|
* 比较运算符
|
|
95
77
|
*/
|
|
96
78
|
export type ComparisonOperator = "=" | ">" | "<" | ">=" | "<=" | "!=" | "<>" | "LIKE" | "IN" | "NOT IN" | "IS NULL" | "IS NOT NULL";
|
|
97
|
-
|
|
98
79
|
/**
|
|
99
80
|
* JOIN 类型
|
|
100
81
|
*/
|
|
101
82
|
export type JoinType = "INNER" | "LEFT" | "RIGHT" | "FULL";
|
|
102
|
-
|
|
103
83
|
/**
|
|
104
84
|
* JOIN 选项
|
|
105
85
|
* 用于简化多表联查的写法
|
|
@@ -112,7 +92,6 @@ export interface JoinOption {
|
|
|
112
92
|
/** JOIN 条件(如 'order.user_id = user.id') */
|
|
113
93
|
on: string;
|
|
114
94
|
}
|
|
115
|
-
|
|
116
95
|
/**
|
|
117
96
|
* 工具函数返回类型
|
|
118
97
|
*/
|
|
@@ -121,17 +100,16 @@ export interface ToolResponse<T = any> {
|
|
|
121
100
|
data?: T;
|
|
122
101
|
error?: string;
|
|
123
102
|
}
|
|
124
|
-
|
|
125
103
|
/**
|
|
126
104
|
* 可选字段
|
|
127
105
|
*/
|
|
128
106
|
export type Optional<T> = T | null | undefined;
|
|
129
|
-
|
|
130
107
|
/**
|
|
131
108
|
* 深度可选
|
|
132
109
|
*/
|
|
133
|
-
export type DeepPartial<T> = T extends object ? {
|
|
134
|
-
|
|
110
|
+
export type DeepPartial<T> = T extends object ? {
|
|
111
|
+
[P in keyof T]?: DeepPartial<T[P]>;
|
|
112
|
+
} : T;
|
|
135
113
|
/**
|
|
136
114
|
* 数据库记录基础类型
|
|
137
115
|
*/
|
|
@@ -142,17 +120,14 @@ export interface BaseRecord {
|
|
|
142
120
|
deleted_at: Date | null;
|
|
143
121
|
state: number;
|
|
144
122
|
}
|
|
145
|
-
|
|
146
123
|
/**
|
|
147
124
|
* 异步函数类型
|
|
148
125
|
*/
|
|
149
126
|
export type AsyncFunction<T = any> = (...args: any[]) => Promise<T>;
|
|
150
|
-
|
|
151
127
|
/**
|
|
152
128
|
* 同步函数类型
|
|
153
129
|
*/
|
|
154
130
|
export type SyncFunction<T = any> = (...args: any[]) => T;
|
|
155
|
-
|
|
156
131
|
/**
|
|
157
132
|
* 通用回调函数
|
|
158
133
|
*/
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 请求上下文类型定义
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
import type { ApiRoute } from "./api.ts";
|
|
6
|
-
|
|
4
|
+
import type { ApiRoute } from "./api";
|
|
7
5
|
/**
|
|
8
6
|
* 请求上下文接口
|
|
9
7
|
*/
|
|
10
|
-
export interface RequestContext {
|
|
8
|
+
export interface RequestContext<TBody = Record<string, any>> {
|
|
11
9
|
/** 请求方法 (GET/POST) */
|
|
12
10
|
method: string;
|
|
13
11
|
/** 请求体参数 */
|
|
14
|
-
body:
|
|
12
|
+
body: TBody;
|
|
15
13
|
/** 用户信息 */
|
|
16
14
|
user: Record<string, any>;
|
|
17
15
|
/** 原始请求对象 */
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 加密相关类型定义
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
4
|
/**
|
|
6
5
|
* 编码类型
|
|
7
6
|
*/
|
|
8
7
|
export type EncodingType = "hex" | "base64" | "base64url";
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* 哈希算法类型
|
|
12
10
|
*/
|
|
13
11
|
export type HashAlgorithm = "md5" | "sha1" | "sha256" | "sha512" | "sha384" | "sha224";
|
|
14
|
-
|
|
15
12
|
/**
|
|
16
13
|
* 密码哈希选项
|
|
17
14
|
*/
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据库操作相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
import type { JoinOption, SqlValue, WhereConditions } from "./common";
|
|
5
|
+
/**
|
|
6
|
+
* 数据库类型
|
|
7
|
+
*/
|
|
8
|
+
export type DatabaseType = "mysql" | "postgres" | "sqlite";
|
|
9
|
+
/**
|
|
10
|
+
* 查询选项
|
|
11
|
+
*/
|
|
12
|
+
export interface QueryOptions {
|
|
13
|
+
/** 表名 */
|
|
14
|
+
table: string;
|
|
15
|
+
/** 查询字段 */
|
|
16
|
+
fields?: string[];
|
|
17
|
+
/** 查询条件 */
|
|
18
|
+
where?: WhereConditions;
|
|
19
|
+
/** 多表联查选项 */
|
|
20
|
+
joins?: JoinOption[];
|
|
21
|
+
/** 排序 */
|
|
22
|
+
orderBy?: string[];
|
|
23
|
+
/** 页码(从 1 开始) */
|
|
24
|
+
page?: number;
|
|
25
|
+
/** 每页数量 */
|
|
26
|
+
limit?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 插入选项
|
|
30
|
+
*/
|
|
31
|
+
export interface InsertOptions {
|
|
32
|
+
/** 表名 */
|
|
33
|
+
table: string;
|
|
34
|
+
/** 插入数据 */
|
|
35
|
+
data: Record<string, SqlValue> | Record<string, SqlValue>[];
|
|
36
|
+
/** 是否返回插入 ID */
|
|
37
|
+
returnId?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 更新选项
|
|
41
|
+
*/
|
|
42
|
+
export interface UpdateOptions {
|
|
43
|
+
/** 表名 */
|
|
44
|
+
table: string;
|
|
45
|
+
/** 更新数据 */
|
|
46
|
+
data: Record<string, SqlValue>;
|
|
47
|
+
/** 更新条件 */
|
|
48
|
+
where: WhereConditions;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 删除选项
|
|
52
|
+
*/
|
|
53
|
+
export interface DeleteOptions {
|
|
54
|
+
/** 表名 */
|
|
55
|
+
table: string;
|
|
56
|
+
/** 删除条件 */
|
|
57
|
+
where: WhereConditions;
|
|
58
|
+
/** 是否物理删除(默认逻辑删除) */
|
|
59
|
+
hard?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* SQL 执行信息
|
|
63
|
+
*/
|
|
64
|
+
export interface SqlInfo {
|
|
65
|
+
sql: string;
|
|
66
|
+
params: any[];
|
|
67
|
+
duration: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* getList/getAll 的 SQL 信息(count/data 两段)
|
|
71
|
+
*/
|
|
72
|
+
export interface ListSql {
|
|
73
|
+
count: SqlInfo;
|
|
74
|
+
data?: SqlInfo;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 统一返回结构
|
|
78
|
+
*/
|
|
79
|
+
export interface DbResult<T = any, SqlT = SqlInfo> {
|
|
80
|
+
data: T;
|
|
81
|
+
sql: SqlT;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 分页结果
|
|
85
|
+
*/
|
|
86
|
+
export interface ListResult<T = any> {
|
|
87
|
+
lists: T[];
|
|
88
|
+
total: number;
|
|
89
|
+
page: number;
|
|
90
|
+
limit: number;
|
|
91
|
+
pages: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 不分页结果(带 total)
|
|
95
|
+
*/
|
|
96
|
+
export interface AllResult<T = any> {
|
|
97
|
+
lists: T[];
|
|
98
|
+
total: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 事务回调
|
|
102
|
+
*/
|
|
103
|
+
export type TransactionCallback<T = any> = (db: any) => Promise<T>;
|
|
104
|
+
/**
|
|
105
|
+
* DbHelper 公开接口(类型层)。
|
|
106
|
+
*
|
|
107
|
+
* 说明:runtime 的实现位于 core 内部(dist/lib),但对外类型应只从 `befly/types/*` 获取。
|
|
108
|
+
* 这里提供一个与实际实现对齐的接口,用于 BeflyContext.db 的类型标注。
|
|
109
|
+
*/
|
|
110
|
+
export interface DbHelper {
|
|
111
|
+
tableExists(tableName: string): Promise<DbResult<boolean>>;
|
|
112
|
+
getCount(options: Omit<QueryOptions, "fields" | "page" | "limit" | "orderBy">): Promise<DbResult<number>>;
|
|
113
|
+
getOne<T extends Record<string, any> = Record<string, any>>(options: QueryOptions): Promise<DbResult<T | null>>;
|
|
114
|
+
getList<T extends Record<string, any> = Record<string, any>>(options: QueryOptions): Promise<DbResult<ListResult<T>, ListSql>>;
|
|
115
|
+
getAll<T extends Record<string, any> = Record<string, any>>(options: Omit<QueryOptions, "page" | "limit">): Promise<DbResult<AllResult<T>, ListSql>>;
|
|
116
|
+
exists(options: Omit<QueryOptions, "fields" | "orderBy" | "page" | "limit">): Promise<DbResult<boolean>>;
|
|
117
|
+
getFieldValue<T = any>(options: Omit<QueryOptions, "fields"> & {
|
|
118
|
+
field: string;
|
|
119
|
+
}): Promise<DbResult<T | null>>;
|
|
120
|
+
insData(options: InsertOptions): Promise<DbResult<number>>;
|
|
121
|
+
insBatch(table: string, dataList: Record<string, any>[]): Promise<DbResult<number[]>>;
|
|
122
|
+
updData(options: UpdateOptions): Promise<DbResult<number>>;
|
|
123
|
+
updBatch(table: string, dataList: Array<{
|
|
124
|
+
id: number;
|
|
125
|
+
data: Record<string, any>;
|
|
126
|
+
}>): Promise<DbResult<number>>;
|
|
127
|
+
delData(options: DeleteOptions): Promise<DbResult<number>>;
|
|
128
|
+
delForce(options: Omit<DeleteOptions, "hard">): Promise<DbResult<number>>;
|
|
129
|
+
delForceBatch(table: string, ids: number[]): Promise<DbResult<number>>;
|
|
130
|
+
enableData(options: Omit<DeleteOptions, "hard">): Promise<DbResult<number>>;
|
|
131
|
+
disableData(options: Omit<DeleteOptions, "hard">): Promise<DbResult<number>>;
|
|
132
|
+
query(sql: string, params?: any[]): Promise<DbResult<any>>;
|
|
133
|
+
unsafe(sqlStr: string, params?: any[]): Promise<DbResult<any>>;
|
|
134
|
+
trans<T = any>(callback: TransactionCallback<T>): Promise<T>;
|
|
135
|
+
increment(table: string, field: string, where: WhereConditions, value?: number): Promise<DbResult<number>>;
|
|
136
|
+
decrement(table: string, field: string, where: WhereConditions, value?: number): Promise<DbResult<number>>;
|
|
137
|
+
[key: string]: any;
|
|
138
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook 类型定义
|
|
3
|
+
*
|
|
4
|
+
* 说明:当前 core 的 hook 执行模型是“顺序执行 handler(befly, ctx)”,无 next / 洋葱链。
|
|
5
|
+
*/
|
|
6
|
+
import type { BeflyContext } from "./befly";
|
|
7
|
+
import type { RequestContext } from "./context";
|
|
8
|
+
export interface Hook {
|
|
9
|
+
/** 运行时由 loader 注入(默认导出对象中通常不需要写) */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** 是否启用该 Hook;必填(true/false) */
|
|
12
|
+
enable: boolean;
|
|
13
|
+
/** 依赖的 hook(按文件名推导的 hookName),用于排序 */
|
|
14
|
+
deps?: string[];
|
|
15
|
+
/** hook 处理函数 */
|
|
16
|
+
handler: (befly: BeflyContext, ctx: RequestContext) => Promise<void> | void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT 相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* JWT Payload 类型
|
|
6
|
+
*/
|
|
7
|
+
export interface JwtPayload {
|
|
8
|
+
/** 用户 ID */
|
|
9
|
+
id: number;
|
|
10
|
+
/** 角色代码 */
|
|
11
|
+
roleCode: string;
|
|
12
|
+
/** 角色类型 */
|
|
13
|
+
roleType: string;
|
|
14
|
+
/** 用户昵称 */
|
|
15
|
+
nickname: string;
|
|
16
|
+
/** 过期时间戳 */
|
|
17
|
+
exp?: number;
|
|
18
|
+
/** 签发时间 */
|
|
19
|
+
iat?: number;
|
|
20
|
+
/** 其他字段 */
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* JWT header(最常用字段)
|
|
25
|
+
*/
|
|
26
|
+
export interface JwtHeader {
|
|
27
|
+
alg?: string;
|
|
28
|
+
typ?: string;
|
|
29
|
+
kid?: string;
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* sign() 选项(映射 fast-jwt 的 signer 参数)
|
|
34
|
+
*/
|
|
35
|
+
export interface JwtSignOptions {
|
|
36
|
+
secret?: string;
|
|
37
|
+
expiresIn?: string | number;
|
|
38
|
+
algorithm?: string;
|
|
39
|
+
issuer?: string;
|
|
40
|
+
audience?: string | string[];
|
|
41
|
+
subject?: string;
|
|
42
|
+
jwtId?: string;
|
|
43
|
+
notBefore?: number | string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* verify() 选项(映射 fast-jwt 的 verifier 参数)
|
|
47
|
+
*/
|
|
48
|
+
export interface JwtVerifyOptions {
|
|
49
|
+
secret?: string;
|
|
50
|
+
algorithms?: string[];
|
|
51
|
+
issuer?: string | string[];
|
|
52
|
+
audience?: string | string[];
|
|
53
|
+
subject?: string | string[];
|
|
54
|
+
ignoreExpiration?: boolean;
|
|
55
|
+
ignoreNotBefore?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* decode(complete=true) 返回
|
|
59
|
+
*/
|
|
60
|
+
export interface JwtDecoded {
|
|
61
|
+
header: JwtHeader;
|
|
62
|
+
payload: JwtPayload;
|
|
63
|
+
signature: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Jwt 实例接口(类型层)。
|
|
67
|
+
*
|
|
68
|
+
* runtime 实现位于 core 内部,但对外类型应从 `befly/types/*` 获取。
|
|
69
|
+
*/
|
|
70
|
+
export interface Jwt {
|
|
71
|
+
sign(payload: JwtPayload, options?: JwtSignOptions): string;
|
|
72
|
+
verify<T = JwtPayload>(token: string, options?: JwtVerifyOptions): T;
|
|
73
|
+
decode(token: string, complete?: false): JwtPayload;
|
|
74
|
+
decode(token: string, complete: true): JwtDecoded;
|
|
75
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日志相关类型定义
|
|
3
|
+
*
|
|
4
|
+
* 说明:这里的类型需要与 core/runtime 的 logger 实现保持一致(大量配置项以 0/1 表示开关)。
|
|
5
|
+
*/
|
|
6
|
+
export type LoggerFlag = 0 | 1;
|
|
7
|
+
/**
|
|
8
|
+
* Logger 插件配置
|
|
9
|
+
*/
|
|
10
|
+
export interface LoggerConfig {
|
|
11
|
+
/** 是否开启 debug 输出(0/1) */
|
|
12
|
+
debug?: LoggerFlag;
|
|
13
|
+
/** 日志目录(相对路径会以初始化 cwd 为锚点解析) */
|
|
14
|
+
dir?: string;
|
|
15
|
+
/** 是否输出到控制台(0/1) */
|
|
16
|
+
console?: LoggerFlag;
|
|
17
|
+
/** 单文件大小(MB) */
|
|
18
|
+
maxSize?: number;
|
|
19
|
+
/** 日志清洗深度限制(1..10) */
|
|
20
|
+
sanitizeDepth?: number;
|
|
21
|
+
/** 日志清洗节点数限制(50..20000) */
|
|
22
|
+
sanitizeNodes?: number;
|
|
23
|
+
/** 日志对象 key 数量限制(10..5000) */
|
|
24
|
+
sanitizeObjectKeys?: number;
|
|
25
|
+
/** 单条字符串最大长度(20..200000) */
|
|
26
|
+
maxStringLen?: number;
|
|
27
|
+
/** 数组最大展开元素数(10..5000) */
|
|
28
|
+
maxArrayItems?: number;
|
|
29
|
+
/**
|
|
30
|
+
* 自定义脱敏字段匹配(支持通配,如 *password*)
|
|
31
|
+
*/
|
|
32
|
+
excludeFields?: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Logger 接口(类型层)。
|
|
36
|
+
*
|
|
37
|
+
* 说明:core/runtime 内部使用的是 Bun 环境的自定义 Logger 实现(异步批量写入)。
|
|
38
|
+
* 对外只承诺常用的 `info/warn/error/debug` 等调用形式(兼容常见 pino 调用风格)。
|
|
39
|
+
*/
|
|
40
|
+
export interface Logger {
|
|
41
|
+
info(...args: any[]): any;
|
|
42
|
+
warn(...args: any[]): any;
|
|
43
|
+
error(...args: any[]): any;
|
|
44
|
+
debug(...args: any[]): any;
|
|
45
|
+
configure(cfg: LoggerConfig): void;
|
|
46
|
+
setMock(mock: any | null): void;
|
|
47
|
+
/**
|
|
48
|
+
* 将当前 buffer 尽快刷入 sink(不会关闭文件句柄)。
|
|
49
|
+
*
|
|
50
|
+
* 说明:主要用于测试或进程即将退出前的“尽快落盘”。
|
|
51
|
+
*/
|
|
52
|
+
flush(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* 刷新并关闭 sink(会关闭文件句柄)。
|
|
55
|
+
*
|
|
56
|
+
* 说明:主要用于测试(避免 Windows 句柄占用导致的删除/轮转失败)。
|
|
57
|
+
*/
|
|
58
|
+
shutdown(): Promise<void>;
|
|
59
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 插件类型定义
|
|
3
|
+
*
|
|
4
|
+
* 说明:当前 core 插件的默认导出形态是:{ deps?: string[], handler(ctx): any }
|
|
5
|
+
*/
|
|
6
|
+
import type { BeflyContext } from "./befly";
|
|
7
|
+
export interface Plugin {
|
|
8
|
+
/** 运行时由 loader 注入(默认导出对象中通常不需要写) */
|
|
9
|
+
name?: string;
|
|
10
|
+
/** 是否启用该插件;必填(true/false) */
|
|
11
|
+
enable: boolean;
|
|
12
|
+
/** 依赖的插件名(由文件名推导出的插件名),用于排序 */
|
|
13
|
+
deps?: string[];
|
|
14
|
+
/** 插件初始化函数(返回会被挂到 befly 上) */
|
|
15
|
+
handler: (context: BeflyContext) => Promise<any> | any;
|
|
16
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis 助手类型定义
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Redis Key 类型
|
|
6
|
+
*/
|
|
7
|
+
export type RedisKey = string;
|
|
8
|
+
/**
|
|
9
|
+
* Redis Value 类型
|
|
10
|
+
*/
|
|
11
|
+
export type RedisValue = string | number | boolean | object | null;
|
|
12
|
+
/**
|
|
13
|
+
* Redis 配置选项
|
|
14
|
+
*/
|
|
15
|
+
export interface RedisOptions {
|
|
16
|
+
host: string;
|
|
17
|
+
port: number;
|
|
18
|
+
password?: string;
|
|
19
|
+
db?: number;
|
|
20
|
+
prefix?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Redis 助手接口
|
|
24
|
+
*/
|
|
25
|
+
export interface RedisHelper {
|
|
26
|
+
setObject<T = any>(key: string, obj: T, ttl?: number | null): Promise<string | null>;
|
|
27
|
+
getObject<T = any>(key: string): Promise<T | null>;
|
|
28
|
+
delObject(key: string): Promise<void>;
|
|
29
|
+
genTimeID(): Promise<number>;
|
|
30
|
+
setString(key: string, value: string, ttl?: number | null): Promise<string | null>;
|
|
31
|
+
getString(key: string): Promise<string | null>;
|
|
32
|
+
exists(key: string): Promise<boolean>;
|
|
33
|
+
incr(key: string): Promise<number>;
|
|
34
|
+
incrWithExpire(key: string, seconds: number): Promise<number>;
|
|
35
|
+
expire(key: string, seconds: number): Promise<number>;
|
|
36
|
+
ttl(key: string): Promise<number>;
|
|
37
|
+
ttlBatch(keys: string[]): Promise<number[]>;
|
|
38
|
+
sadd(key: string, members: string[]): Promise<number>;
|
|
39
|
+
sismember(key: string, member: string): Promise<boolean>;
|
|
40
|
+
scard(key: string): Promise<number>;
|
|
41
|
+
smembers(key: string): Promise<string[]>;
|
|
42
|
+
saddBatch(items: Array<{
|
|
43
|
+
key: string;
|
|
44
|
+
members: string[];
|
|
45
|
+
}>): Promise<number>;
|
|
46
|
+
sismemberBatch(items: Array<{
|
|
47
|
+
key: string;
|
|
48
|
+
member: string;
|
|
49
|
+
}>): Promise<boolean[]>;
|
|
50
|
+
del(key: string): Promise<number>;
|
|
51
|
+
delBatch(keys: string[]): Promise<number>;
|
|
52
|
+
setBatch<T = any>(items: Array<{
|
|
53
|
+
key: string;
|
|
54
|
+
value: T;
|
|
55
|
+
ttl?: number | null;
|
|
56
|
+
}>): Promise<number>;
|
|
57
|
+
getBatch<T = any>(keys: string[]): Promise<Array<T | null>>;
|
|
58
|
+
existsBatch(keys: string[]): Promise<boolean[]>;
|
|
59
|
+
expireBatch(items: Array<{
|
|
60
|
+
key: string;
|
|
61
|
+
seconds: number;
|
|
62
|
+
}>): Promise<number>;
|
|
63
|
+
ping(): Promise<string>;
|
|
64
|
+
[key: string]: any;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* RedisHelper 构造函数类型
|
|
68
|
+
*/
|
|
69
|
+
export interface RedisHelperConstructor {
|
|
70
|
+
new (prefix?: string): RedisHelper;
|
|
71
|
+
}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* - active/ready 用于全局版本切换与就绪门槛
|
|
6
6
|
* - role meta 用于单角色增量刷新后的可观测性
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
8
|
export type RoleApisCacheMeta = {
|
|
10
9
|
hash: string;
|
|
11
10
|
at: number;
|
|
@@ -14,7 +13,6 @@ export type RoleApisCacheMeta = {
|
|
|
14
13
|
/** 可选:用于和 DB 侧的更新时间做一致性对比 */
|
|
15
14
|
updatedAt?: number;
|
|
16
15
|
};
|
|
17
|
-
|
|
18
16
|
export type RoleApisRoleMeta = {
|
|
19
17
|
roleCode: string;
|
|
20
18
|
at: number;
|