befly 2.3.2 → 3.0.0

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 (93) hide show
  1. package/apis/health/info.ts +64 -0
  2. package/apis/tool/tokenCheck.ts +51 -0
  3. package/bin/befly.ts +202 -0
  4. package/checks/conflict.ts +408 -0
  5. package/checks/table.ts +284 -0
  6. package/config/env.ts +218 -0
  7. package/config/reserved.ts +96 -0
  8. package/main.ts +101 -0
  9. package/package.json +45 -16
  10. package/plugins/{db.js → db.ts} +25 -12
  11. package/plugins/logger.ts +28 -0
  12. package/plugins/redis.ts +51 -0
  13. package/plugins/tool.ts +34 -0
  14. package/scripts/syncDb/apply.ts +171 -0
  15. package/scripts/syncDb/constants.ts +70 -0
  16. package/scripts/syncDb/ddl.ts +182 -0
  17. package/scripts/syncDb/helpers.ts +172 -0
  18. package/scripts/syncDb/index.ts +215 -0
  19. package/scripts/syncDb/schema.ts +199 -0
  20. package/scripts/syncDb/sqlite.ts +50 -0
  21. package/scripts/syncDb/state.ts +104 -0
  22. package/scripts/syncDb/table.ts +204 -0
  23. package/scripts/syncDb/tableCreate.ts +142 -0
  24. package/scripts/syncDb/tests/constants.test.ts +104 -0
  25. package/scripts/syncDb/tests/ddl.test.ts +134 -0
  26. package/scripts/syncDb/tests/helpers.test.ts +70 -0
  27. package/scripts/syncDb/types.ts +92 -0
  28. package/scripts/syncDb/version.ts +73 -0
  29. package/scripts/syncDb.ts +9 -0
  30. package/scripts/syncDev.ts +112 -0
  31. package/system.ts +149 -0
  32. package/tables/_common.json +21 -0
  33. package/tables/admin.json +10 -0
  34. package/tsconfig.json +58 -0
  35. package/types/api.d.ts +246 -0
  36. package/types/befly.d.ts +234 -0
  37. package/types/common.d.ts +215 -0
  38. package/types/context.ts +167 -0
  39. package/types/crypto.d.ts +23 -0
  40. package/types/database.d.ts +278 -0
  41. package/types/index.d.ts +16 -0
  42. package/types/index.ts +459 -0
  43. package/types/jwt.d.ts +99 -0
  44. package/types/logger.d.ts +43 -0
  45. package/types/plugin.d.ts +109 -0
  46. package/types/redis.d.ts +44 -0
  47. package/types/tool.d.ts +67 -0
  48. package/types/validator.d.ts +45 -0
  49. package/utils/addonHelper.ts +60 -0
  50. package/utils/api.ts +23 -0
  51. package/utils/{colors.js → colors.ts} +79 -21
  52. package/utils/crypto.ts +308 -0
  53. package/utils/datetime.ts +51 -0
  54. package/utils/dbHelper.ts +142 -0
  55. package/utils/errorHandler.ts +68 -0
  56. package/utils/index.ts +46 -0
  57. package/utils/jwt.ts +493 -0
  58. package/utils/logger.ts +284 -0
  59. package/utils/objectHelper.ts +68 -0
  60. package/utils/pluginHelper.ts +62 -0
  61. package/utils/redisHelper.ts +338 -0
  62. package/utils/response.ts +38 -0
  63. package/utils/{sqlBuilder.js → sqlBuilder.ts} +233 -97
  64. package/utils/sqlHelper.ts +447 -0
  65. package/utils/tableHelper.ts +167 -0
  66. package/utils/tool.ts +230 -0
  67. package/utils/typeHelper.ts +101 -0
  68. package/utils/validate.ts +451 -0
  69. package/utils/{xml.js → xml.ts} +100 -74
  70. package/.npmrc +0 -3
  71. package/.prettierignore +0 -2
  72. package/.prettierrc +0 -11
  73. package/apis/health/info.js +0 -49
  74. package/apis/tool/tokenCheck.js +0 -29
  75. package/checks/table.js +0 -221
  76. package/config/env.js +0 -62
  77. package/main.js +0 -579
  78. package/plugins/logger.js +0 -14
  79. package/plugins/redis.js +0 -32
  80. package/plugins/tool.js +0 -8
  81. package/scripts/syncDb.js +0 -603
  82. package/system.js +0 -118
  83. package/tables/common.json +0 -16
  84. package/tables/tool.json +0 -6
  85. package/utils/api.js +0 -27
  86. package/utils/crypto.js +0 -260
  87. package/utils/index.js +0 -387
  88. package/utils/jwt.js +0 -387
  89. package/utils/logger.js +0 -143
  90. package/utils/redisHelper.js +0 -74
  91. package/utils/sqlManager.js +0 -471
  92. package/utils/tool.js +0 -31
  93. package/utils/validate.js +0 -228
package/utils/validate.js DELETED
@@ -1,228 +0,0 @@
1
- import { isType, parseFieldRule } from './index.js';
2
-
3
- // 移除本文件重复实现,统一复用 index.js 导出的校验函数与 parseFieldRule
4
-
5
- /**
6
- * 验证器类
7
- */
8
- export class Validator {
9
- /**
10
- * 验证数据
11
- * @param {Object} data - 要验证的数据对象
12
- * @param {Object} rules - 验证规则对象
13
- * @param {Array} required - 必传字段数组
14
- * @returns {Object} { code: 0|1, fields: {} }
15
- */
16
- validate(data, rules, required = []) {
17
- const result = {
18
- code: 0,
19
- fields: {}
20
- };
21
-
22
- // 参数检查
23
- if (!this.checkParams(data, rules, required, result)) {
24
- return result;
25
- }
26
-
27
- // 检查必传字段
28
- this.checkRequiredFields(data, rules, required, result);
29
-
30
- // 验证所有在规则中定义的字段
31
- this.validateFields(data, rules, required, result);
32
-
33
- return result;
34
- }
35
-
36
- /**
37
- * 检查参数有效性
38
- */
39
- checkParams(data, rules, required, result) {
40
- if (!data || typeof data !== 'object') {
41
- result.code = 1;
42
- result.fields.error = '数据必须是对象格式';
43
- return false;
44
- }
45
-
46
- if (!rules || typeof rules !== 'object') {
47
- result.code = 1;
48
- result.fields.error = '验证规则必须是对象格式';
49
- return false;
50
- }
51
-
52
- if (!Array.isArray(required)) {
53
- result.code = 1;
54
- result.fields.error = '必传字段必须是数组格式';
55
- return false;
56
- }
57
-
58
- return true;
59
- }
60
-
61
- /**
62
- * 检查必传字段
63
- */
64
- checkRequiredFields(data, rules, required, result) {
65
- for (const fieldName of required) {
66
- if (!(fieldName in data) || data[fieldName] === undefined || data[fieldName] === null || data[fieldName] === '') {
67
- result.code = 1;
68
- const ruleParts = parseFieldRule(rules[fieldName] || '');
69
- const fieldLabel = ruleParts[0] || fieldName;
70
- result.fields[fieldName] = `${fieldLabel}(${fieldName})为必填项`;
71
- }
72
- }
73
- }
74
-
75
- /**
76
- * 验证所有字段
77
- */
78
- validateFields(data, rules, required, result) {
79
- for (const [fieldName, rule] of Object.entries(rules)) {
80
- // 如果字段不存在且不是必传字段,跳过验证
81
- if (!(fieldName in data) && !required.includes(fieldName)) {
82
- continue;
83
- }
84
-
85
- // 如果必传验证已经失败,跳过后续验证
86
- if (result.fields[fieldName]) {
87
- continue;
88
- }
89
-
90
- const value = data[fieldName];
91
- const error = this.validateFieldValue(value, rule, fieldName);
92
-
93
- if (error) {
94
- result.code = 1;
95
- result.fields[fieldName] = error;
96
- }
97
- }
98
- }
99
-
100
- /**
101
- * 验证单个字段的值
102
- */
103
- validateFieldValue(value, rule, fieldName) {
104
- const [name, type, minStr, maxStr, defaultValue, isIndexStr, regexConstraint] = parseFieldRule(rule);
105
- const min = minStr === 'null' ? null : parseInt(minStr) || 0;
106
- const max = maxStr === 'null' ? null : parseInt(maxStr) || 0;
107
- const spec = regexConstraint === 'null' ? null : regexConstraint.trim();
108
-
109
- switch (type.toLowerCase()) {
110
- case 'number':
111
- return this.validateNumber(value, name, min, max, spec, fieldName);
112
- case 'string':
113
- return this.validateString(value, name, min, max, spec, fieldName);
114
- case 'text':
115
- return this.validateString(value, name, min, max, spec, fieldName);
116
- case 'array':
117
- return this.validateArray(value, name, min, max, spec, fieldName);
118
- default:
119
- return `字段 ${fieldName} 的类型 ${type} 不支持`;
120
- }
121
- }
122
-
123
- /**
124
- * 验证数字类型
125
- */
126
- validateNumber(value, name, min, max, spec, fieldName) {
127
- try {
128
- if (isType(value, 'number') === false) {
129
- return `${name}(${fieldName})必须是数字`;
130
- }
131
-
132
- if (min !== null && value < min) {
133
- return `${name}(${fieldName})不能小于${min}`;
134
- }
135
-
136
- if (max !== null && max > 0 && value > max) {
137
- return `${name}(${fieldName})不能大于${max}`;
138
- }
139
-
140
- if (spec && spec.trim() !== '') {
141
- try {
142
- const regExp = new RegExp(spec);
143
- if (!regExp.test(String(value))) {
144
- return `${name}(${fieldName})格式不正确`;
145
- }
146
- } catch (error) {
147
- return `${name}(${fieldName})的正则表达式格式错误`;
148
- }
149
- }
150
-
151
- return null;
152
- } catch (error) {
153
- return `${name}(${fieldName})验证出错: ${error.message}`;
154
- }
155
- }
156
-
157
- /**
158
- * 验证字符串类型
159
- */
160
- validateString(value, name, min, max, spec, fieldName) {
161
- try {
162
- if (isType(value, 'string') === false) {
163
- return `${name}(${fieldName})必须是字符串`;
164
- }
165
-
166
- if (min !== null && value.length < min) {
167
- return `${name}(${fieldName})长度不能少于${min}个字符`;
168
- }
169
-
170
- if (max !== null && max > 0 && value.length > max) {
171
- return `${name}(${fieldName})长度不能超过${max}个字符`;
172
- }
173
-
174
- if (spec && spec.trim() !== '') {
175
- try {
176
- const regExp = new RegExp(spec);
177
- if (!regExp.test(value)) {
178
- return `${name}(${fieldName})格式不正确`;
179
- }
180
- } catch (error) {
181
- return `${name}(${fieldName})的正则表达式格式错误`;
182
- }
183
- }
184
-
185
- return null;
186
- } catch (error) {
187
- return `${name}(${fieldName})验证出错: ${error.message}`;
188
- }
189
- }
190
-
191
- /**
192
- * 验证数组类型
193
- */
194
- validateArray(value, name, min, max, spec, fieldName) {
195
- try {
196
- if (!Array.isArray(value)) {
197
- return `${name}(${fieldName})必须是数组`;
198
- }
199
-
200
- if (min !== null && value.length < min) {
201
- return `${name}(${fieldName})至少需要${min}个元素`;
202
- }
203
-
204
- if (max !== null && max > 0 && value.length > max) {
205
- return `${name}(${fieldName})最多只能有${max}个元素`;
206
- }
207
-
208
- if (spec && spec.trim() !== '') {
209
- try {
210
- const regExp = new RegExp(spec);
211
- for (const item of value) {
212
- if (!regExp.test(String(item))) {
213
- return `${name}(${fieldName})中的元素"${item}"格式不正确`;
214
- }
215
- }
216
- } catch (error) {
217
- return `${name}(${fieldName})的正则表达式格式错误`;
218
- }
219
- }
220
-
221
- return null;
222
- } catch (error) {
223
- return `${name}(${fieldName})验证出错: ${error.message}`;
224
- }
225
- }
226
- }
227
-
228
- export const validator = new Validator();