grule
v0.1.1
由 Hiukky 使用 ❤︎ 构建
Grule 是使用 JSON 方案针对值测试条件的最小机制。其主要目标是作为 Rete 机制工作,并以执行且简单的方式解决所有操作。
npm i grule
yarn add grule
要设置您的规则方案,只需按照以下步骤操作即可。
要创建测试实例,您将需要大量事实来为引擎提供动力。
// Import Engine
import { Grule } from 'grule'
// Create an type
type IUser = {
id : number
name : string
}
// Create metadata
const metadata : IUser = {
id : 3 ,
name : 'test' ,
}
// Create instance
const grule = new Grule < IUser > ( metadata )
创建引擎实例并预加载事实后,下一步是注册规则。要注册规则,您必须导入IRules <T>
接口并为事实中声明的属性创建一组规则。
规则遵循事实中声明的数据的结构。对于每个属性,将执行一条规则。
规则创建函数提供 2 个参数,第一个是attributes
,第二个是events
。
您可以为每个测试使用逻辑表达式并执行所需的操作,也可以使用when
和then
事件来测试并根据结果执行操作。这是动态测试的一个不错的选择。
创建实例并注册规则后,您可以通过传递定义为参数的规则来简单地执行 run 方法。测试结束时,如果没有错误中断测试流程,将返回一个布尔值。
true
所有条件均已满足。false
一个或所有条件失败。 // ... Previous code
// Create Rules
const rules : IRules < IUser > = ( { id , name } , { when } ) => ( {
id : when ( id . diff ( 1 ) ) . then ( ( ) => {
throw new Error ( 'User not allowed.' )
} ) ,
name : name . in ( [ 'foo' , 'test' ] ) ,
} )
// Enroll rules
grule . run ( rules )
您还可以以更简洁的方式简化之前的流程。 (最终代码示例)
// Import Engine
import { Grule } from 'grule'
// Create an type
type IUser = {
id : number
name : string
}
// Create instance
new Grule < IUser > ( {
id : 3 ,
name : 'test' ,
} ) . run ( ( { id , name } , { when } ) => ( {
id : when ( id . diff ( 1 ) ) . then ( ( ) => {
throw new Error ( 'User not allowed.' )
} ) ,
name : name . in ( [ 'foo' , 'test' ] ) ,
} ) )
每个属性都有 9 种可用于测试的方法。
// Type: less(value: ILess): boolean
// Acceptable: ['number', 'bigint']
// Type: lessOrEqual(value: ILess): boolean
// Acceptable: ['number', 'bigint']
// Type: greater(value: IGreater): boolean
// Acceptable: ['number', 'bigint']
// Type: greaterOrEqual(value: IGreater): boolean
// Acceptable: ['number', 'bigint']
// Type: equal(value: IEqual): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'date']
// Type: diff(value: IEqual): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'date']
// Type: in(value: In): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'array']
// Type: notIn(value: In): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'array']
// Type: eval(operator: IOperatorsList, arg1: A): boolean
// Acceptable: [Idle]
Grule when
只有 1 个事件。它返回一个带有执行测试的布尔结果的承诺。
// Type: when(test: boolean): Promise<boolean>
// Acceptable: ['boolean']
Grule 处于初始版本,还没有很多功能,但您可以随时发送您的建议或打开 PR。