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
package/types/logger.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 日志相关类型定义
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 日志级别
|
|
7
|
-
*/
|
|
8
|
-
export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 日志配置
|
|
12
|
-
*/
|
|
13
|
-
export interface LoggerConfig {
|
|
14
|
-
/** 是否开启调试模式 (0: 关闭, 1: 开启) @default 0 */
|
|
15
|
-
debug?: number;
|
|
16
|
-
/**
|
|
17
|
-
* 需要在日志中脱敏/排除的字段(仅支持数组)
|
|
18
|
-
* - 支持模糊匹配:"token" 可命中 "accessToken" / "user_token" 等
|
|
19
|
-
* - 支持后缀匹配:"*Secret" 可命中 "mySecret" / "appSecret" 等
|
|
20
|
-
* - 支持前缀匹配:"auth*" 可命中 "authorization" 等
|
|
21
|
-
* - 支持包含匹配:"*token*" 可命中包含 token 的任意 key
|
|
22
|
-
*/
|
|
23
|
-
excludeFields?: string[];
|
|
24
|
-
/** 日志目录 @default './logs' */
|
|
25
|
-
dir?: string;
|
|
26
|
-
/** 是否输出到控制台 (0: 关闭, 1: 开启) @default 1 */
|
|
27
|
-
console?: number;
|
|
28
|
-
/** 单个日志文件最大大小 (MB) @default 10 */
|
|
29
|
-
maxSize?: number;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 字符串最大长度(超过会被截断)
|
|
33
|
-
* - 影响所有结构化字段中的 string(包括 db.debug 打印的 sqlPreview)
|
|
34
|
-
* - 生产环境建议保持较小值;需要更完整 SQL 时可在开发环境调大
|
|
35
|
-
* @default 100
|
|
36
|
-
*/
|
|
37
|
-
maxStringLen?: number;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 数组最多保留的元素数量(超出部分丢弃)
|
|
41
|
-
* - 仅影响结构化日志清洗(数组裁剪)
|
|
42
|
-
* @default 100
|
|
43
|
-
*/
|
|
44
|
-
maxArrayItems?: number;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* 结构化日志清洗:最大清洗深度(非递归遍历的 depth 上限)
|
|
48
|
-
* - 值越大,日志更“完整”,但 CPU/内存开销更高
|
|
49
|
-
* - 建议:生产环境保持较小值(默认 3),开发环境可调大(例如 5)
|
|
50
|
-
* @default 3
|
|
51
|
-
*/
|
|
52
|
-
sanitizeDepth?: number;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* 结构化日志清洗:最大遍历节点数(防止超大对象/数组导致性能抖动)
|
|
56
|
-
* @default 500
|
|
57
|
-
*/
|
|
58
|
-
sanitizeNodes?: number;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* 结构化日志清洗:对象最多保留的 key 数(超出部分丢弃)
|
|
62
|
-
* @default 100
|
|
63
|
-
*/
|
|
64
|
-
sanitizeObjectKeys?: number;
|
|
65
|
-
}
|
package/types/plugin.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Befly 插件系统类型定义
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { BeflyContext } from "./befly.ts";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 插件配置类型
|
|
9
|
-
*/
|
|
10
|
-
export interface Plugin {
|
|
11
|
-
/** 插件名称(运行时动态添加,由文件名生成) */
|
|
12
|
-
name?: string;
|
|
13
|
-
|
|
14
|
-
/** 依赖的插件列表(在这些插件之后执行) */
|
|
15
|
-
deps: string[];
|
|
16
|
-
|
|
17
|
-
/** 插件初始化函数 */
|
|
18
|
-
handler: (context: BeflyContext) => any | Promise<any>;
|
|
19
|
-
}
|
package/types/redis.d.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Redis 相关类型定义
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RedisClient as BunRedisClient } from "bun";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Redis 客户端类型
|
|
9
|
-
*/
|
|
10
|
-
export type RedisClient = BunRedisClient;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Redis 键前缀
|
|
14
|
-
*/
|
|
15
|
-
export type RedisKeyPrefix = string;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Redis TTL(秒)
|
|
19
|
-
*/
|
|
20
|
-
export type RedisTTL = number | null;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Redis 助手接口
|
|
24
|
-
*/
|
|
25
|
-
export interface RedisHelper {
|
|
26
|
-
// ==================== 基础操作 ====================
|
|
27
|
-
/** 设置对象到 Redis */
|
|
28
|
-
setObject<T = any>(key: string, obj: T, ttl?: RedisTTL): Promise<string | null>;
|
|
29
|
-
/** 从 Redis 获取对象 */
|
|
30
|
-
getObject<T = any>(key: string): Promise<T | null>;
|
|
31
|
-
/** 从 Redis 删除对象 */
|
|
32
|
-
delObject(key: string): Promise<void>;
|
|
33
|
-
/** 设置字符串值 */
|
|
34
|
-
setString(key: string, value: string, ttl?: RedisTTL): Promise<string | null>;
|
|
35
|
-
/** 获取字符串值 */
|
|
36
|
-
getString(key: string): Promise<string | null>;
|
|
37
|
-
/** 检查键是否存在 */
|
|
38
|
-
exists(key: string): Promise<boolean>;
|
|
39
|
-
/** 原子自增 */
|
|
40
|
-
incr(key: string): Promise<number>;
|
|
41
|
-
/** 原子自增并在首次自增时设置过期时间 */
|
|
42
|
-
incrWithExpire(key: string, seconds: number): Promise<number>;
|
|
43
|
-
/** 设置过期时间 */
|
|
44
|
-
expire(key: string, seconds: number): Promise<number>;
|
|
45
|
-
/** 获取剩余过期时间 */
|
|
46
|
-
ttl(key: string): Promise<number>;
|
|
47
|
-
/** 删除键 */
|
|
48
|
-
del(key: string): Promise<number>;
|
|
49
|
-
/** 测试 Redis 连接 */
|
|
50
|
-
ping(): Promise<string>;
|
|
51
|
-
|
|
52
|
-
// ==================== ID 生成 ====================
|
|
53
|
-
/** 生成基于时间的唯一 ID (16位纯数字: 13位毫秒时间戳 + 3位后缀100-999) */
|
|
54
|
-
genTimeID(): Promise<number>;
|
|
55
|
-
|
|
56
|
-
// ==================== Set 操作 ====================
|
|
57
|
-
/** 向 Set 中添加一个或多个成员 */
|
|
58
|
-
sadd(key: string, members: string[]): Promise<number>;
|
|
59
|
-
/** 判断成员是否在 Set 中 */
|
|
60
|
-
sismember(key: string, member: string): Promise<number>;
|
|
61
|
-
/** 获取 Set 的成员数量 */
|
|
62
|
-
scard(key: string): Promise<number>;
|
|
63
|
-
/** 获取 Set 的所有成员 */
|
|
64
|
-
smembers(key: string): Promise<string[]>;
|
|
65
|
-
|
|
66
|
-
// ==================== 批量操作 ====================
|
|
67
|
-
/** 批量设置对象 */
|
|
68
|
-
setBatch<T = any>(items: Array<{ key: string; value: T; ttl?: number | null }>): Promise<number>;
|
|
69
|
-
/** 批量获取对象 */
|
|
70
|
-
getBatch<T = any>(keys: string[]): Promise<Array<T | null>>;
|
|
71
|
-
/** 批量删除键 */
|
|
72
|
-
delBatch(keys: string[]): Promise<number>;
|
|
73
|
-
/** 批量检查键是否存在 */
|
|
74
|
-
existsBatch(keys: string[]): Promise<boolean[]>;
|
|
75
|
-
/** 批量设置过期时间 */
|
|
76
|
-
expireBatch(items: Array<{ key: string; seconds: number }>): Promise<number>;
|
|
77
|
-
/** 批量获取剩余过期时间 */
|
|
78
|
-
ttlBatch(keys: string[]): Promise<number[]>;
|
|
79
|
-
/** 批量向多个 Set 添加成员 */
|
|
80
|
-
saddBatch(items: Array<{ key: string; members: string[] }>): Promise<number>;
|
|
81
|
-
/** 批量检查成员是否在 Set 中 */
|
|
82
|
-
sismemberBatch(items: Array<{ key: string; member: string }>): Promise<boolean[]>;
|
|
83
|
-
}
|
package/types/sync.d.ts
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI 项目类型定义
|
|
3
|
-
* 集中管理所有接口和类型定义
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// ==================== 命令选项类型 ====================
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* SyncMenu 命令选项
|
|
10
|
-
*/
|
|
11
|
-
export interface SyncMenuOptions {
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* 菜单配置
|
|
16
|
-
*/
|
|
17
|
-
export interface MenuConfig {
|
|
18
|
-
name: string;
|
|
19
|
-
path: string;
|
|
20
|
-
icon?: string;
|
|
21
|
-
sort?: number;
|
|
22
|
-
children?: MenuConfig[];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* 菜单配置来源(三值约束)
|
|
27
|
-
*/
|
|
28
|
-
export type MenuConfigSource = "core" | "app" | "addon";
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* SyncDev 命令选项
|
|
32
|
-
*/
|
|
33
|
-
export interface SyncDevOptions {
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* SyncApi 命令选项
|
|
38
|
-
*/
|
|
39
|
-
export interface SyncApiOptions {
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* syncApi 入参条目(来自 scanFiles 扫描结果的最小子集)
|
|
44
|
-
* - addonName 必须为 string(app/core 为 "",addon 为真实 addonName)
|
|
45
|
-
* - type 可选:历史/测试数据可能缺失;存在且不为 "api" 时在 syncApi 中会被跳过
|
|
46
|
-
*/
|
|
47
|
-
export type SyncApiItem = {
|
|
48
|
-
type?: string;
|
|
49
|
-
routePath: string;
|
|
50
|
-
name: string;
|
|
51
|
-
addonName: string;
|
|
52
|
-
} & Record<string, any>;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* API 信息
|
|
56
|
-
*/
|
|
57
|
-
export interface ApiInfo {
|
|
58
|
-
name: string;
|
|
59
|
-
path: string;
|
|
60
|
-
description: string;
|
|
61
|
-
addonName: string;
|
|
62
|
-
addonTitle: string;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// ==================== 统计信息类型 ====================
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* SyncMenu 统计信息
|
|
69
|
-
*/
|
|
70
|
-
export interface SyncMenuStats {
|
|
71
|
-
totalMenus: number;
|
|
72
|
-
parentMenus: number;
|
|
73
|
-
childMenus: number;
|
|
74
|
-
created: number;
|
|
75
|
-
updated: number;
|
|
76
|
-
deleted: number;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* SyncApi 统计信息
|
|
81
|
-
*/
|
|
82
|
-
export interface SyncApiStats {
|
|
83
|
-
totalApis: number;
|
|
84
|
-
created: number;
|
|
85
|
-
updated: number;
|
|
86
|
-
deleted: number;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// ==================== 数据库相关类型 ====================
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* 列信息接口
|
|
93
|
-
*/
|
|
94
|
-
export interface ColumnInfo {
|
|
95
|
-
type: string;
|
|
96
|
-
columnType: string;
|
|
97
|
-
length: number | null;
|
|
98
|
-
max?: number | null;
|
|
99
|
-
nullable: boolean;
|
|
100
|
-
defaultValue: any;
|
|
101
|
-
comment: string | null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* 索引信息接口(键为索引名,值为列名数组)
|
|
106
|
-
*/
|
|
107
|
-
export interface IndexInfo {
|
|
108
|
-
[indexName: string]: string[];
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* 字段变更接口
|
|
113
|
-
*/
|
|
114
|
-
export interface FieldChange {
|
|
115
|
-
type: "length" | "datatype" | "comment" | "default" | "nullable";
|
|
116
|
-
current: any;
|
|
117
|
-
expected: any;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* 索引操作接口
|
|
122
|
-
*/
|
|
123
|
-
export interface IndexAction {
|
|
124
|
-
action: "create" | "drop";
|
|
125
|
-
indexName: string;
|
|
126
|
-
fieldName: string;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* 表变更计划接口
|
|
131
|
-
*/
|
|
132
|
-
export interface TablePlan {
|
|
133
|
-
changed: boolean;
|
|
134
|
-
addClauses: string[];
|
|
135
|
-
modifyClauses: string[];
|
|
136
|
-
defaultClauses: string[];
|
|
137
|
-
indexActions: IndexAction[];
|
|
138
|
-
commentActions?: string[];
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* 全局统计对象
|
|
143
|
-
*/
|
|
144
|
-
export interface GlobalStats {
|
|
145
|
-
processedTables: number;
|
|
146
|
-
createdTables: number;
|
|
147
|
-
modifiedTables: number;
|
|
148
|
-
addFields: number;
|
|
149
|
-
nameChanges: number;
|
|
150
|
-
typeChanges: number;
|
|
151
|
-
minChanges: number;
|
|
152
|
-
maxChanges: number;
|
|
153
|
-
defaultChanges: number;
|
|
154
|
-
indexCreate: number;
|
|
155
|
-
indexDrop: number;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* 解析后的字段规则
|
|
160
|
-
*/
|
|
161
|
-
export interface ParsedFieldRule {
|
|
162
|
-
name: string;
|
|
163
|
-
type: "string" | "number" | "text" | "array_string" | "array_text";
|
|
164
|
-
min: number | null;
|
|
165
|
-
max: number | null;
|
|
166
|
-
default: any;
|
|
167
|
-
index: 0 | 1;
|
|
168
|
-
regex: string | null;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* 阶段统计信息
|
|
173
|
-
*/
|
|
174
|
-
export interface PhaseStats {
|
|
175
|
-
startTime: number;
|
|
176
|
-
endTime?: number;
|
|
177
|
-
duration?: number;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// ==================== 报告相关类型 ====================
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* 完整的同步报告数据结构
|
|
184
|
-
*/
|
|
185
|
-
export interface SyncReport {
|
|
186
|
-
meta: SyncReportMeta;
|
|
187
|
-
database: DatabaseReport;
|
|
188
|
-
api: ApiReport;
|
|
189
|
-
menu: MenuReport;
|
|
190
|
-
dev: DevReport;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* 报告元信息
|
|
195
|
-
*/
|
|
196
|
-
export interface SyncReportMeta {
|
|
197
|
-
timestamp: number;
|
|
198
|
-
timestampStr: string;
|
|
199
|
-
environment: string;
|
|
200
|
-
totalTime: number;
|
|
201
|
-
status: "success" | "error";
|
|
202
|
-
error?: string;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* 数据库同步报告
|
|
207
|
-
*/
|
|
208
|
-
export interface DatabaseReport {
|
|
209
|
-
stats: SyncDbStats;
|
|
210
|
-
details: {
|
|
211
|
-
tables: TableChangeDetail[];
|
|
212
|
-
};
|
|
213
|
-
timing: {
|
|
214
|
-
validation: number;
|
|
215
|
-
connection: number;
|
|
216
|
-
scanning: number;
|
|
217
|
-
processing: number;
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* 表变更详情
|
|
223
|
-
*/
|
|
224
|
-
export interface TableChangeDetail {
|
|
225
|
-
name: string;
|
|
226
|
-
source: "app" | "addon";
|
|
227
|
-
addonName?: string;
|
|
228
|
-
action: "create" | "modify" | "none";
|
|
229
|
-
fields: {
|
|
230
|
-
added: FieldDetail[];
|
|
231
|
-
modified: FieldModification[];
|
|
232
|
-
removed: FieldDetail[];
|
|
233
|
-
};
|
|
234
|
-
indexes: {
|
|
235
|
-
added: IndexDetail[];
|
|
236
|
-
removed: IndexDetail[];
|
|
237
|
-
};
|
|
238
|
-
sql: string[];
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* 字段详情
|
|
243
|
-
*/
|
|
244
|
-
export interface FieldDetail {
|
|
245
|
-
name: string;
|
|
246
|
-
type: string;
|
|
247
|
-
length?: number;
|
|
248
|
-
nullable?: boolean;
|
|
249
|
-
defaultValue?: any;
|
|
250
|
-
comment?: string;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* 字段修改详情
|
|
255
|
-
*/
|
|
256
|
-
export interface FieldModification {
|
|
257
|
-
name: string;
|
|
258
|
-
before: FieldDetail;
|
|
259
|
-
after: FieldDetail;
|
|
260
|
-
changeType: "type" | "length" | "default" | "nullable" | "comment";
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* 索引详情
|
|
265
|
-
*/
|
|
266
|
-
export interface IndexDetail {
|
|
267
|
-
name: string;
|
|
268
|
-
fields: string[];
|
|
269
|
-
type?: string;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* 接口同步报告
|
|
274
|
-
*/
|
|
275
|
-
export interface ApiReport {
|
|
276
|
-
stats: {
|
|
277
|
-
totalApis: number;
|
|
278
|
-
appApis: number;
|
|
279
|
-
addonApis: number;
|
|
280
|
-
created: number;
|
|
281
|
-
updated: number;
|
|
282
|
-
deleted: number;
|
|
283
|
-
};
|
|
284
|
-
details: {
|
|
285
|
-
bySource: {
|
|
286
|
-
app: ApiDetail[];
|
|
287
|
-
addons: Record<string, ApiDetail[]>;
|
|
288
|
-
};
|
|
289
|
-
byAction: {
|
|
290
|
-
created: ApiDetail[];
|
|
291
|
-
updated: ApiDetailWithDiff[];
|
|
292
|
-
deleted: ApiDetail[];
|
|
293
|
-
};
|
|
294
|
-
};
|
|
295
|
-
timing: {
|
|
296
|
-
scanning: number;
|
|
297
|
-
processing: number;
|
|
298
|
-
caching: number;
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* 接口详情
|
|
304
|
-
*/
|
|
305
|
-
export interface ApiDetail {
|
|
306
|
-
name: string;
|
|
307
|
-
path: string;
|
|
308
|
-
method: string;
|
|
309
|
-
description: string;
|
|
310
|
-
addonName: string;
|
|
311
|
-
addonTitle: string;
|
|
312
|
-
auth?: boolean;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* 带差异的接口详情
|
|
317
|
-
*/
|
|
318
|
-
export interface ApiDetailWithDiff extends ApiDetail {
|
|
319
|
-
changes: {
|
|
320
|
-
field: string;
|
|
321
|
-
before: any;
|
|
322
|
-
after: any;
|
|
323
|
-
}[];
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* 菜单同步报告
|
|
328
|
-
*/
|
|
329
|
-
export interface MenuReport {
|
|
330
|
-
stats: SyncMenuStats;
|
|
331
|
-
details: {
|
|
332
|
-
tree: MenuTreeNode[];
|
|
333
|
-
byAction: {
|
|
334
|
-
created: MenuDetail[];
|
|
335
|
-
updated: MenuDetailWithDiff[];
|
|
336
|
-
deleted: MenuDetail[];
|
|
337
|
-
};
|
|
338
|
-
};
|
|
339
|
-
timing: {
|
|
340
|
-
scanning: number;
|
|
341
|
-
processing: number;
|
|
342
|
-
caching: number;
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* 菜单树节点
|
|
348
|
-
*/
|
|
349
|
-
export interface MenuTreeNode {
|
|
350
|
-
name: string;
|
|
351
|
-
path: string;
|
|
352
|
-
icon?: string;
|
|
353
|
-
sort?: number;
|
|
354
|
-
type?: number;
|
|
355
|
-
action?: "created" | "updated" | "none";
|
|
356
|
-
children?: MenuTreeNode[];
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* 菜单详情
|
|
361
|
-
*/
|
|
362
|
-
export interface MenuDetail {
|
|
363
|
-
name: string;
|
|
364
|
-
path: string;
|
|
365
|
-
icon?: string;
|
|
366
|
-
sort?: number;
|
|
367
|
-
type?: number;
|
|
368
|
-
addonName: string;
|
|
369
|
-
addonTitle: string;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* 带差异的菜单详情
|
|
374
|
-
*/
|
|
375
|
-
export interface MenuDetailWithDiff extends MenuDetail {
|
|
376
|
-
changes: {
|
|
377
|
-
field: string;
|
|
378
|
-
before: any;
|
|
379
|
-
after: any;
|
|
380
|
-
}[];
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* 管理员详情
|
|
385
|
-
*/
|
|
386
|
-
export interface AdminDetail {
|
|
387
|
-
username: string;
|
|
388
|
-
action: "created" | "updated" | "exists";
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* 角色详情
|
|
393
|
-
*/
|
|
394
|
-
export interface RoleDetail {
|
|
395
|
-
name: string;
|
|
396
|
-
permissions: number;
|
|
397
|
-
action: "created" | "updated" | "exists";
|
|
398
|
-
}
|