DSL 与 SQL
X-Filter 让可视化构建器和文本工作流保持一致。同一份 Filter 可以序列化为 JSON、格式化为 DSL、从 DSL 解析回来,并转换为参数化 SQL。
DSL 格式
import { formatDSL, tryParseDSL } from '@x-filter/core/dsl';
const dsl = formatDSL(filter);
const parsed = tryParseDSL('status:equals:open AND amount:gt:1000');
DSL 条件使用 field:operator:value。分组和布尔逻辑是显式的:
accountTier:equals:enterprise AND (contractValue:gt:50000 OR ownerActive:equals:true)
SQL 生成
SQL 输出是参数化的,返回 { sql, params }。
import { toSQL } from '@x-filter/core/sql';
const result = toSQL(filter, {
fieldMap: {
accountTier: 'accounts.tier',
contractValue: 'contracts.arr',
},
});
安全模型
使用 fieldMap 把公开字段名映射到数据库标识符。生成 SQL 前会检查标识符,所有值都会放入 params 数组。
SQL 生成是集成辅助工具,不是授权层。租户、权限和行级安全检查仍应保留在后端。
校验顺序
先校验,再导出:
const validation = validate(filter, schema);
if (!validation.valid) return validation.errors;
return toSQL(filter, { fieldMap });