feat: 配置变量系统与 target id/name 双字段标识
- 新增顶层 variables 段支持 string/number/boolean 字面量
- target 字符串字段支持 、、{...} 转义语法
- 变量解析优先级: variables -> process.env -> 默认值 -> 报错
- 完整引用保留原始类型,部分引用拼接为字符串
- 变量替换在 YAML 解析后、AJV 校验前执行
- 替换仅作用于 targets,跳过 id/type 字段
- target 新增必填 id 字段作为唯一标识,name 改为可选展示名称
- 数据库存储/API/前端全面迁移到 id 标识
- 统一 checker 运行时类型检查为 es-toolkit predicates
- 同步 delta specs 到主 specs,归档 config-variables 变更
This commit is contained in:
@@ -28,6 +28,7 @@ describe("config contract", () => {
|
||||
targets: [
|
||||
{
|
||||
http: { method: "get", unknownHttpField: true, url: "https://example.com" },
|
||||
id: "api",
|
||||
name: "api",
|
||||
type: "http",
|
||||
},
|
||||
@@ -36,6 +37,31 @@ describe("config contract", () => {
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
test("导出 schema 支持 variables 且要求 target id", () => {
|
||||
const ajv = new Ajv({
|
||||
allErrors: true,
|
||||
coerceTypes: false,
|
||||
removeAdditional: false,
|
||||
strict: true,
|
||||
useDefaults: false,
|
||||
});
|
||||
const validate = ajv.compile(createProbeConfigJsonSchema(createDefaultCheckerRegistry()));
|
||||
|
||||
expect(
|
||||
validate({
|
||||
targets: [{ http: { url: "https://example.com" }, id: "api", type: "http" }],
|
||||
variables: { base_url: "https://example.com", enabled: true, port: 443 },
|
||||
}),
|
||||
).toBe(true);
|
||||
|
||||
expect(
|
||||
validate({
|
||||
targets: [{ http: { url: "https://example.com" }, type: "http" }],
|
||||
variables: { bad: null },
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
test("Ajv 错误转换为中文结构化 issue", () => {
|
||||
const result = validateProbeConfigContract(
|
||||
{
|
||||
@@ -43,6 +69,7 @@ describe("config contract", () => {
|
||||
{
|
||||
group: 123,
|
||||
http: { extra: true },
|
||||
id: "api",
|
||||
name: "api",
|
||||
type: "http",
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user