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。