befly 2.3.3 → 3.0.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/checks/conflict.ts +329 -0
- package/checks/table.ts +252 -0
- package/config/env.ts +218 -0
- package/config/fields.ts +55 -0
- package/config/regexAliases.ts +51 -0
- package/config/reserved.ts +96 -0
- package/main.ts +47 -0
- package/package.json +26 -11
- package/plugins/db.ts +60 -0
- package/plugins/logger.ts +28 -0
- package/plugins/redis.ts +47 -0
- package/scripts/syncDb/apply.ts +171 -0
- package/scripts/syncDb/constants.ts +71 -0
- package/scripts/syncDb/ddl.ts +189 -0
- package/scripts/syncDb/helpers.ts +173 -0
- package/scripts/syncDb/index.ts +203 -0
- package/scripts/syncDb/schema.ts +199 -0
- package/scripts/syncDb/sqlite.ts +50 -0
- package/scripts/syncDb/state.ts +106 -0
- package/scripts/syncDb/table.ts +214 -0
- package/scripts/syncDb/tableCreate.ts +148 -0
- package/scripts/syncDb/tests/constants.test.ts +105 -0
- package/scripts/syncDb/tests/ddl.test.ts +134 -0
- package/scripts/syncDb/tests/helpers.test.ts +70 -0
- package/scripts/syncDb/types.ts +92 -0
- package/scripts/syncDb/version.ts +73 -0
- package/scripts/syncDb.ts +10 -0
- package/tsconfig.json +58 -0
- package/types/addon.d.ts +53 -0
- package/types/api.d.ts +249 -0
- package/types/befly.d.ts +230 -0
- package/types/common.d.ts +215 -0
- package/types/context.d.ts +7 -0
- package/types/crypto.d.ts +23 -0
- package/types/database.d.ts +273 -0
- package/types/index.d.ts +450 -0
- package/types/index.ts +438 -0
- package/types/jwt.d.ts +99 -0
- package/types/logger.d.ts +43 -0
- package/types/plugin.d.ts +109 -0
- package/types/redis.d.ts +46 -0
- package/types/tool.d.ts +67 -0
- package/types/validator.d.ts +43 -0
- package/types/validator.ts +43 -0
- package/utils/colors.ts +221 -0
- package/utils/crypto.ts +308 -0
- package/utils/database.ts +348 -0
- package/utils/dbHelper.ts +713 -0
- package/utils/helper.ts +812 -0
- package/utils/index.ts +33 -0
- package/utils/jwt.ts +493 -0
- package/utils/logger.ts +191 -0
- package/utils/redisHelper.ts +321 -0
- package/utils/requestContext.ts +167 -0
- package/utils/sqlBuilder.ts +611 -0
- package/utils/validate.ts +493 -0
- package/utils/{xml.js → xml.ts} +100 -74
- package/.npmrc +0 -3
- package/.prettierignore +0 -2
- package/.prettierrc +0 -11
- package/apis/health/info.js +0 -49
- package/apis/tool/tokenCheck.js +0 -29
- package/bin/befly.js +0 -109
- package/bunfig.toml +0 -3
- package/checks/table.js +0 -206
- package/config/env.js +0 -64
- package/main.js +0 -579
- package/plugins/db.js +0 -46
- package/plugins/logger.js +0 -14
- package/plugins/redis.js +0 -32
- package/plugins/tool.js +0 -8
- package/scripts/syncDb.js +0 -752
- package/scripts/syncDev.js +0 -96
- package/system.js +0 -118
- package/tables/common.json +0 -16
- package/tables/tool.json +0 -6
- package/utils/api.js +0 -27
- package/utils/colors.js +0 -83
- package/utils/crypto.js +0 -260
- package/utils/index.js +0 -334
- package/utils/jwt.js +0 -387
- package/utils/logger.js +0 -143
- package/utils/redisHelper.js +0 -74
- package/utils/sqlBuilder.js +0 -498
- package/utils/sqlManager.js +0 -471
- package/utils/tool.js +0 -31
- package/utils/validate.js +0 -226
package/types/befly.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Befly 核心框架类型定义
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Plugin } from './plugin.js';
|
|
6
|
+
import type { ApiRoute, HttpMethod } from './api.js';
|
|
7
|
+
import type { KeyValue } from './common.js';
|
|
8
|
+
import type { Logger } from '../utils/logger.js';
|
|
9
|
+
import type { Jwt } from '../utils/jwt.js';
|
|
10
|
+
import type { Validator } from '../utils/validate.js';
|
|
11
|
+
import type { DbHelper } from '../utils/dbHelper.js';
|
|
12
|
+
import type { Crypto2 } from '../utils/crypto.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Befly 应用选项
|
|
16
|
+
*/
|
|
17
|
+
export interface BeflyOptions {
|
|
18
|
+
/** 应用名称 */
|
|
19
|
+
name?: string;
|
|
20
|
+
|
|
21
|
+
/** 监听主机 */
|
|
22
|
+
host?: string;
|
|
23
|
+
|
|
24
|
+
/** 监听端口 */
|
|
25
|
+
port?: number;
|
|
26
|
+
|
|
27
|
+
/** 是否启用 CORS */
|
|
28
|
+
cors?: boolean | CorsOptions;
|
|
29
|
+
|
|
30
|
+
/** 静态文件目录 */
|
|
31
|
+
staticDir?: string;
|
|
32
|
+
|
|
33
|
+
/** 上传文件目录 */
|
|
34
|
+
uploadDir?: string;
|
|
35
|
+
|
|
36
|
+
/** 最大请求体大小 */
|
|
37
|
+
maxBodySize?: number;
|
|
38
|
+
|
|
39
|
+
/** 自定义配置 */
|
|
40
|
+
[key: string]: any;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* CORS 配置选项
|
|
45
|
+
*/
|
|
46
|
+
export interface CorsOptions {
|
|
47
|
+
origin?: string | string[] | boolean;
|
|
48
|
+
methods?: string[];
|
|
49
|
+
allowedHeaders?: string[];
|
|
50
|
+
exposedHeaders?: string[];
|
|
51
|
+
credentials?: boolean;
|
|
52
|
+
maxAge?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Befly 核心类
|
|
57
|
+
*/
|
|
58
|
+
export interface Befly {
|
|
59
|
+
/** API 路由映射 */
|
|
60
|
+
apiRoutes: Map<string, ApiRoute>;
|
|
61
|
+
|
|
62
|
+
/** 插件列表 */
|
|
63
|
+
pluginLists: Plugin[];
|
|
64
|
+
|
|
65
|
+
/** 应用上下文 */
|
|
66
|
+
appContext: KeyValue;
|
|
67
|
+
|
|
68
|
+
/** 应用选项 */
|
|
69
|
+
appOptions: BeflyOptions;
|
|
70
|
+
|
|
71
|
+
/** 日志器 */
|
|
72
|
+
logger: Logger;
|
|
73
|
+
|
|
74
|
+
/** JWT 工具 */
|
|
75
|
+
jwt: Jwt;
|
|
76
|
+
|
|
77
|
+
/** 验证器 */
|
|
78
|
+
validator: Validator;
|
|
79
|
+
|
|
80
|
+
/** SQL 管理器 */
|
|
81
|
+
sql: DbHelper;
|
|
82
|
+
|
|
83
|
+
/** 加密工具 */
|
|
84
|
+
crypto: Crypto2;
|
|
85
|
+
|
|
86
|
+
/** 数据库连接 */
|
|
87
|
+
db: any;
|
|
88
|
+
|
|
89
|
+
/** Redis 连接 */
|
|
90
|
+
redis: any;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 初始化检查器
|
|
94
|
+
*/
|
|
95
|
+
initCheck(): Promise<void>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 加载插件
|
|
99
|
+
*/
|
|
100
|
+
loadPlugins(): Promise<void>;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 加载 API 路由
|
|
104
|
+
*/
|
|
105
|
+
loadApis(): Promise<void>;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 启动服务器
|
|
109
|
+
*/
|
|
110
|
+
start(): Promise<void>;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 停止服务器
|
|
114
|
+
*/
|
|
115
|
+
stop(): Promise<void>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 处理请求
|
|
119
|
+
*/
|
|
120
|
+
handleRequest(request: Request): Promise<Response>;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* 注册中间件
|
|
124
|
+
*/
|
|
125
|
+
use(middleware: Function): void;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* 获取配置
|
|
129
|
+
*/
|
|
130
|
+
getConfig(key: string): any;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 设置配置
|
|
134
|
+
*/
|
|
135
|
+
setConfig(key: string, value: any): void;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Befly 构造函数类型
|
|
140
|
+
*/
|
|
141
|
+
export interface BeflyConstructor {
|
|
142
|
+
new (options?: BeflyOptions): Befly;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* 服务器启动选项
|
|
147
|
+
*/
|
|
148
|
+
export interface ServerOptions {
|
|
149
|
+
/** 主机名 */
|
|
150
|
+
hostname: string;
|
|
151
|
+
|
|
152
|
+
/** 端口 */
|
|
153
|
+
port: number;
|
|
154
|
+
|
|
155
|
+
/** 请求处理函数 */
|
|
156
|
+
fetch: (request: Request) => Promise<Response>;
|
|
157
|
+
|
|
158
|
+
/** 错误处理函数 */
|
|
159
|
+
error?: (error: Error) => Response;
|
|
160
|
+
|
|
161
|
+
/** 开发模式 */
|
|
162
|
+
development?: boolean;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* 服务器实例
|
|
167
|
+
*/
|
|
168
|
+
export interface Server {
|
|
169
|
+
/** 主机名 */
|
|
170
|
+
hostname: string;
|
|
171
|
+
|
|
172
|
+
/** 端口 */
|
|
173
|
+
port: number;
|
|
174
|
+
|
|
175
|
+
/** 停止服务器 */
|
|
176
|
+
stop(): Promise<void>;
|
|
177
|
+
|
|
178
|
+
/** 重启服务器 */
|
|
179
|
+
reload(options: ServerOptions): void;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* 检查函数类型
|
|
184
|
+
*/
|
|
185
|
+
export type CheckFunction = (befly: Befly) => Promise<void> | void;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* 检查结果
|
|
189
|
+
*/
|
|
190
|
+
export interface CheckResult {
|
|
191
|
+
/** 文件名 */
|
|
192
|
+
filename: string;
|
|
193
|
+
|
|
194
|
+
/** 检查名称 */
|
|
195
|
+
checkName: string;
|
|
196
|
+
|
|
197
|
+
/** 是否通过 */
|
|
198
|
+
passed: boolean;
|
|
199
|
+
|
|
200
|
+
/** 执行时间(纳秒) */
|
|
201
|
+
duration: number;
|
|
202
|
+
|
|
203
|
+
/** 错误信息 */
|
|
204
|
+
error?: Error;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* 性能统计
|
|
209
|
+
*/
|
|
210
|
+
export interface PerformanceStats {
|
|
211
|
+
/** 启动时间 */
|
|
212
|
+
startTime: number;
|
|
213
|
+
|
|
214
|
+
/** 检查时间 */
|
|
215
|
+
checkTime: number;
|
|
216
|
+
|
|
217
|
+
/** 插件加载时间 */
|
|
218
|
+
pluginTime: number;
|
|
219
|
+
|
|
220
|
+
/** API 加载时间 */
|
|
221
|
+
apiTime: number;
|
|
222
|
+
|
|
223
|
+
/** 总时间 */
|
|
224
|
+
totalTime: number;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* 导出 Befly 实例创建函数
|
|
229
|
+
*/
|
|
230
|
+
export function createBefly(options?: BeflyOptions): Befly;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Befly 框架通用类型定义
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 响应结果类型
|
|
7
|
+
*/
|
|
8
|
+
export interface ResponseResult<T = any> {
|
|
9
|
+
code: number;
|
|
10
|
+
msg: string;
|
|
11
|
+
data?: T;
|
|
12
|
+
error?: any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 验证结果类型
|
|
17
|
+
*/
|
|
18
|
+
export interface ValidationResult {
|
|
19
|
+
code: 0 | 1;
|
|
20
|
+
fields: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 字段规则字符串
|
|
25
|
+
* 格式: "字段名|类型|最小值|最大值|默认值|是否索引|正则约束"
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* "用户名|string|2|50|null|1|^[a-zA-Z0-9_]+$"
|
|
29
|
+
* "年龄|number|0|150|18|0|null"
|
|
30
|
+
*/
|
|
31
|
+
export type FieldRule = string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 表定义类型
|
|
35
|
+
*/
|
|
36
|
+
export type TableDefinition = Record<string, FieldRule>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 解析后的字段规则
|
|
40
|
+
*/
|
|
41
|
+
export interface ParsedFieldRule {
|
|
42
|
+
name: string; // 字段名称
|
|
43
|
+
type: 'string' | 'number' | 'text' | 'array';
|
|
44
|
+
min: number | null; // 最小值
|
|
45
|
+
max: number | null; // 最大值
|
|
46
|
+
default: any; // 默认值
|
|
47
|
+
index: 0 | 1; // 是否索引
|
|
48
|
+
regex: string | null; // 正则约束
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* SQL 查询参数类型
|
|
53
|
+
*/
|
|
54
|
+
export type SqlValue = string | number | boolean | null | Date;
|
|
55
|
+
export type SqlParams = SqlValue[];
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 排序方向
|
|
59
|
+
*/
|
|
60
|
+
export type OrderDirection = 'ASC' | 'DESC' | 'asc' | 'desc';
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 比较运算符
|
|
64
|
+
*/
|
|
65
|
+
export type ComparisonOperator = '=' | '>' | '<' | '>=' | '<=' | '!=' | '<>' | 'LIKE' | 'IN' | 'NOT IN' | 'IS NULL' | 'IS NOT NULL';
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* JOIN 类型
|
|
69
|
+
*/
|
|
70
|
+
export type JoinType = 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 数据库配置类型
|
|
74
|
+
*/
|
|
75
|
+
export interface DatabaseConfig {
|
|
76
|
+
host: string;
|
|
77
|
+
port: number;
|
|
78
|
+
user: string;
|
|
79
|
+
password: string;
|
|
80
|
+
database: string;
|
|
81
|
+
connectionLimit?: number;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Redis 配置类型
|
|
86
|
+
*/
|
|
87
|
+
export interface RedisConfig {
|
|
88
|
+
host: string;
|
|
89
|
+
port: number;
|
|
90
|
+
password?: string;
|
|
91
|
+
db?: number;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 日志级别
|
|
96
|
+
*/
|
|
97
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 日志配置
|
|
101
|
+
*/
|
|
102
|
+
export interface LoggerConfig {
|
|
103
|
+
level?: LogLevel;
|
|
104
|
+
transport?: {
|
|
105
|
+
target: string;
|
|
106
|
+
options?: Record<string, any>;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 环境变量类型
|
|
112
|
+
*/
|
|
113
|
+
export interface EnvConfig {
|
|
114
|
+
// 服务配置
|
|
115
|
+
appName: string;
|
|
116
|
+
appHost: string;
|
|
117
|
+
appPort: number;
|
|
118
|
+
|
|
119
|
+
// 数据库配置
|
|
120
|
+
mysqlHost: string;
|
|
121
|
+
mysqlPort: number;
|
|
122
|
+
mysqlUsername: string;
|
|
123
|
+
mysqlPassword: string;
|
|
124
|
+
mysqlDatabase: string;
|
|
125
|
+
|
|
126
|
+
// Redis 配置
|
|
127
|
+
redisHost?: string;
|
|
128
|
+
redisPort?: number;
|
|
129
|
+
redisPassword?: string;
|
|
130
|
+
|
|
131
|
+
// JWT 配置
|
|
132
|
+
jwtSecret: string;
|
|
133
|
+
jwtExpires?: string;
|
|
134
|
+
|
|
135
|
+
// 其他配置
|
|
136
|
+
[key: string]: any;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* 工具函数返回类型
|
|
141
|
+
*/
|
|
142
|
+
export interface ToolResponse<T = any> {
|
|
143
|
+
success: boolean;
|
|
144
|
+
data?: T;
|
|
145
|
+
error?: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 分页参数
|
|
150
|
+
*/
|
|
151
|
+
export interface PaginationParams {
|
|
152
|
+
page: number;
|
|
153
|
+
limit: number;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* 分页结果
|
|
158
|
+
*/
|
|
159
|
+
export interface PaginatedResult<T = any> {
|
|
160
|
+
total: number;
|
|
161
|
+
page: number;
|
|
162
|
+
limit: number;
|
|
163
|
+
data: T[];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* 通用键值对
|
|
168
|
+
*/
|
|
169
|
+
export type KeyValue<T = any> = Record<string, T>;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* 可选字段
|
|
173
|
+
*/
|
|
174
|
+
export type Optional<T> = T | null | undefined;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* 深度可选
|
|
178
|
+
*/
|
|
179
|
+
export type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* 保留字段(系统自动管理)
|
|
183
|
+
*/
|
|
184
|
+
export type ReservedFields = 'id' | 'created_at' | 'updated_at' | 'deleted_at' | 'state';
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* 排除保留字段
|
|
188
|
+
*/
|
|
189
|
+
export type ExcludeReserved<T> = Omit<T, ReservedFields>;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* 数据库记录基础类型
|
|
193
|
+
*/
|
|
194
|
+
export interface BaseRecord {
|
|
195
|
+
id: number;
|
|
196
|
+
created_at: Date;
|
|
197
|
+
updated_at: Date;
|
|
198
|
+
deleted_at: Date | null;
|
|
199
|
+
state: number;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* 异步函数类型
|
|
204
|
+
*/
|
|
205
|
+
export type AsyncFunction<T = any> = (...args: any[]) => Promise<T>;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* 同步函数类型
|
|
209
|
+
*/
|
|
210
|
+
export type SyncFunction<T = any> = (...args: any[]) => T;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* 通用回调函数
|
|
214
|
+
*/
|
|
215
|
+
export type Callback<T = any> = (error: Error | null, result?: T) => void;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 加密相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 编码类型
|
|
7
|
+
*/
|
|
8
|
+
export type EncodingType = 'hex' | 'base64' | 'base64url';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 哈希算法类型
|
|
12
|
+
*/
|
|
13
|
+
export type HashAlgorithm = 'md5' | 'sha1' | 'sha256' | 'sha512' | 'sha384' | 'sha224';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 密码哈希选项
|
|
17
|
+
*/
|
|
18
|
+
export interface PasswordHashOptions {
|
|
19
|
+
algorithm?: 'argon2' | 'bcrypt';
|
|
20
|
+
memoryCost?: number;
|
|
21
|
+
timeCost?: number;
|
|
22
|
+
[key: string]: any;
|
|
23
|
+
}
|