befly 2.1.0 → 2.1.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/table.js +2 -42
- package/package.json +2 -1
- package/utils/util.js +8 -8
- package/utils/validate.js +2 -92
package/checks/table.js
CHANGED
|
@@ -1,49 +1,9 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { Logger } from '../utils/logger.js';
|
|
3
|
-
import { parseFieldRule } from '../utils/util.js';
|
|
3
|
+
import { parseFieldRule, validateFieldName, validateFieldType, validateMinMax, validateDefaultValue, validateIndex, validateRegex } from '../utils/util.js';
|
|
4
4
|
import { __dirtables, getProjectDir } from '../system.js';
|
|
5
5
|
|
|
6
|
-
//
|
|
7
|
-
const validateFieldName = (name) => {
|
|
8
|
-
const nameRegex = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/;
|
|
9
|
-
return nameRegex.test(name);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
// 验证字段类型是否为指定的四种类型之一
|
|
13
|
-
const validateFieldType = (type) => {
|
|
14
|
-
const validTypes = ['string', 'number', 'text', 'array'];
|
|
15
|
-
return validTypes.includes(type);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// 验证最小值/最大值是否为null或数字
|
|
19
|
-
const validateMinMax = (value) => {
|
|
20
|
-
return value === 'null' || (!isNaN(parseFloat(value)) && isFinite(parseFloat(value)));
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
// 验证默认值是否为null、字符串或数字
|
|
24
|
-
const validateDefaultValue = (value) => {
|
|
25
|
-
if (value === 'null') return true;
|
|
26
|
-
// 检查是否为数字
|
|
27
|
-
if (!isNaN(parseFloat(value)) && isFinite(parseFloat(value))) return true;
|
|
28
|
-
// 其他情况视为字符串,都是有效的
|
|
29
|
-
return true;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
// 验证索引标识是否为0或1
|
|
33
|
-
const validateIndex = (value) => {
|
|
34
|
-
return value === '0' || value === '1';
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
// 验证正则表达式是否有效
|
|
38
|
-
const validateRegex = (value) => {
|
|
39
|
-
if (value === 'null') return true;
|
|
40
|
-
try {
|
|
41
|
-
new RegExp(value);
|
|
42
|
-
return true;
|
|
43
|
-
} catch (e) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
6
|
+
// 所有校验函数均复用 utils/util.js 导出的实现
|
|
47
7
|
|
|
48
8
|
export default async () => {
|
|
49
9
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "befly",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Buma - 为 Bun 专属打造的 API 接口框架核心引擎",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"rb": "bun run release.js -b",
|
|
18
18
|
"rc": "bun run release.js -c",
|
|
19
19
|
"test": "bun test",
|
|
20
|
+
"test:unit": "bun test tests",
|
|
20
21
|
"test:jwt": "bun test tests/jwt.test.js",
|
|
21
22
|
"dev": "bun run project/main.js",
|
|
22
23
|
"server": "bunx --bun pm2 start pm2.config.cjs -a",
|
package/utils/util.js
CHANGED
|
@@ -223,25 +223,25 @@ export const filterLogFields = (body, excludeFields = '') => {
|
|
|
223
223
|
return filtered;
|
|
224
224
|
};
|
|
225
225
|
|
|
226
|
-
//
|
|
227
|
-
const validateFieldName = (name) => {
|
|
228
|
-
const nameRegex = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/;
|
|
226
|
+
// 验证字段名称:中文、数字、字母、空格、下划线、短横线
|
|
227
|
+
export const validateFieldName = (name) => {
|
|
228
|
+
const nameRegex = /^[\u4e00-\u9fa5a-zA-Z0-9 _-]+$/;
|
|
229
229
|
return nameRegex.test(name);
|
|
230
230
|
};
|
|
231
231
|
|
|
232
232
|
// 验证字段类型是否为指定的四种类型之一
|
|
233
|
-
const validateFieldType = (type) => {
|
|
233
|
+
export const validateFieldType = (type) => {
|
|
234
234
|
const validTypes = ['string', 'number', 'text', 'array'];
|
|
235
235
|
return validTypes.includes(type);
|
|
236
236
|
};
|
|
237
237
|
|
|
238
238
|
// 验证最小值/最大值是否为null或数字
|
|
239
|
-
const validateMinMax = (value) => {
|
|
239
|
+
export const validateMinMax = (value) => {
|
|
240
240
|
return value === 'null' || (!isNaN(parseFloat(value)) && isFinite(parseFloat(value)));
|
|
241
241
|
};
|
|
242
242
|
|
|
243
243
|
// 验证默认值是否为null、字符串或数字
|
|
244
|
-
const validateDefaultValue = (value) => {
|
|
244
|
+
export const validateDefaultValue = (value) => {
|
|
245
245
|
if (value === 'null') return true;
|
|
246
246
|
// 检查是否为数字
|
|
247
247
|
if (!isNaN(parseFloat(value)) && isFinite(parseFloat(value))) return true;
|
|
@@ -250,12 +250,12 @@ const validateDefaultValue = (value) => {
|
|
|
250
250
|
};
|
|
251
251
|
|
|
252
252
|
// 验证索引标识是否为0或1
|
|
253
|
-
const validateIndex = (value) => {
|
|
253
|
+
export const validateIndex = (value) => {
|
|
254
254
|
return value === '0' || value === '1';
|
|
255
255
|
};
|
|
256
256
|
|
|
257
257
|
// 验证正则表达式是否有效
|
|
258
|
-
const validateRegex = (value) => {
|
|
258
|
+
export const validateRegex = (value) => {
|
|
259
259
|
if (value === 'null') return true;
|
|
260
260
|
try {
|
|
261
261
|
new RegExp(value);
|
package/utils/validate.js
CHANGED
|
@@ -1,96 +1,6 @@
|
|
|
1
|
-
import { isType } from './util.js';
|
|
2
|
-
|
|
3
|
-
// 验证字段名称是否为中文、数字、字母
|
|
4
|
-
const validateFieldName = (name) => {
|
|
5
|
-
const nameRegex = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/;
|
|
6
|
-
return nameRegex.test(name);
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
// 验证字段类型是否为指定的四种类型之一
|
|
10
|
-
const validateFieldType = (type) => {
|
|
11
|
-
const validTypes = ['string', 'number', 'text', 'array'];
|
|
12
|
-
return validTypes.includes(type);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
// 验证最小值/最大值是否为null或数字
|
|
16
|
-
const validateMinMax = (value) => {
|
|
17
|
-
return value === 'null' || (!isNaN(parseFloat(value)) && isFinite(parseFloat(value)));
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// 验证默认值是否为null、字符串或数字
|
|
21
|
-
const validateDefaultValue = (value) => {
|
|
22
|
-
if (value === 'null') return true;
|
|
23
|
-
// 检查是否为数字
|
|
24
|
-
if (!isNaN(parseFloat(value)) && isFinite(parseFloat(value))) return true;
|
|
25
|
-
// 其他情况视为字符串,都是有效的
|
|
26
|
-
return true;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// 验证索引标识是否为0或1
|
|
30
|
-
const validateIndex = (value) => {
|
|
31
|
-
return value === '0' || value === '1';
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// 验证正则表达式是否有效
|
|
35
|
-
const validateRegex = (value) => {
|
|
36
|
-
if (value === 'null') return true;
|
|
37
|
-
try {
|
|
38
|
-
new RegExp(value);
|
|
39
|
-
return true;
|
|
40
|
-
} catch (e) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
// 专门用于处理⚡分隔的字段规则
|
|
46
|
-
const parseFieldRule = (rule) => {
|
|
47
|
-
const allParts = rule.split('⚡');
|
|
48
|
-
|
|
49
|
-
// 必须包含7个部分:显示名⚡类型⚡最小值⚡最大值⚡默认值⚡是否索引⚡正则约束
|
|
50
|
-
if (allParts.length !== 7) {
|
|
51
|
-
throw new Error(`字段规则格式错误,必须包含7个部分,当前包含${allParts.length}个部分`);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// 验证各个部分的格式
|
|
55
|
-
const [name, type, minValue, maxValue, defaultValue, isIndex, regexConstraint] = allParts;
|
|
56
|
-
|
|
57
|
-
// 第1个值:名称必须为中文、数字、字母
|
|
58
|
-
if (!validateFieldName(name)) {
|
|
59
|
-
throw new Error(`字段名称 "${name}" 格式错误,必须为中文、数字、字母`);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// 第2个值:字段类型必须为string,number,text,array之一
|
|
63
|
-
if (!validateFieldType(type)) {
|
|
64
|
-
throw new Error(`字段类型 "${type}" 格式错误,必须为string、number、text、array之一`);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// 第3个值:最小值必须为null或数字
|
|
68
|
-
if (!validateMinMax(minValue)) {
|
|
69
|
-
throw new Error(`最小值 "${minValue}" 格式错误,必须为null或数字`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// 第4个值:最大值必须为null或数字
|
|
73
|
-
if (!validateMinMax(maxValue)) {
|
|
74
|
-
throw new Error(`最大值 "${maxValue}" 格式错误,必须为null或数字`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// 第5个值:默认值必须为null、字符串或数字
|
|
78
|
-
if (!validateDefaultValue(defaultValue)) {
|
|
79
|
-
throw new Error(`默认值 "${defaultValue}" 格式错误,必须为null、字符串或数字`);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// 第6个值:是否创建索引必须为0或1
|
|
83
|
-
if (!validateIndex(isIndex)) {
|
|
84
|
-
throw new Error(`索引标识 "${isIndex}" 格式错误,必须为0或1`);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// 第7个值:必须为null或正则表达式
|
|
88
|
-
if (!validateRegex(regexConstraint)) {
|
|
89
|
-
throw new Error(`正则约束 "${regexConstraint}" 格式错误,必须为null或有效的正则表达式`);
|
|
90
|
-
}
|
|
1
|
+
import { isType, parseFieldRule } from './util.js';
|
|
91
2
|
|
|
92
|
-
|
|
93
|
-
};
|
|
3
|
+
// 移除本文件重复实现,统一复用 util.js 导出的校验函数与 parseFieldRule
|
|
94
4
|
|
|
95
5
|
/**
|
|
96
6
|
* 验证器类
|