Dibangun dengan ❤︎ oleh Hiukky
Grule adalah mekanisme minimal untuk menguji kondisi terhadap nilai menggunakan skema JSON. Tujuan utamanya adalah untuk bekerja sebagai mekanisme Rete dan menyelesaikan semua operasi dengan cara yang performatif dan sederhana.
npm i grule
yarn add grule
Untuk menyiapkan skema aturan Anda, cukup ikuti langkah-langkah di bawah ini.
Untuk membuat instance pengujian, Anda memerlukan banyak fakta untuk menggerakkan mesin.
// 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 )
Setelah membuat instance mesin, memuat fakta sebelumnya, langkah selanjutnya adalah mendaftarkan aturan. Untuk mendaftarkan aturan, Anda harus mengimpor antarmuka IRules <T>
dan membuat seperangkat aturan untuk atribut yang dinyatakan dalam fakta.
Aturannya mengikuti struktur data yang dinyatakan dalam fakta. Untuk setiap atribut, aturan akan dieksekusi.
Fungsi pembuatan aturan menawarkan 2 argumen, yang pertama adalah attributes
dan yang kedua adalah events
.
Anda dapat menggunakan ekspresi logis untuk setiap pengujian dan melakukan tindakan yang Anda inginkan, atau Anda dapat menggunakan peristiwa when
dan then
untuk menguji dan melakukan tindakan berdasarkan hasilnya. Ini adalah pilihan yang bagus untuk pengujian dinamis.
Setelah membuat instance dan mendaftarkan aturan, Anda cukup menjalankan metode run dengan meneruskan aturan yang ditentukan sebagai parameter. Di akhir pengujian, jika tidak ada kesalahan yang mengganggu aliran pengujian, nilai Boolean akan dikembalikan.
true
semua syarat telah berlalu.false
satu atau semua kondisi gagal. // ... 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 )
Anda juga dapat menyederhanakan alur sebelumnya dengan cara yang lebih bersih. (Contoh kode akhir)
// 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' ] ) ,
} ) )
Setiap atribut memiliki 9 metode yang tersedia untuk pengujiannya.
// 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 saat ini hanya memiliki satu acara dibandingkan when
. Ia mengembalikan janji dengan hasil boolean dari pengujian yang dilakukan.
// Type: when(test: boolean): Promise<boolean>
// Acceptable: ['boolean']
Grule masih dalam versi awal tanpa banyak fitur, tetapi Anda bebas mengirimkan saran atau membuka PR.