all files / src/ rules.ts

100% Statements 15/15
100% Branches 2/2
100% Functions 3/3
100% Lines 14/14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42                                                        
import {originRulesAnalyse, RealRules} from "./origin-rules-analyse";
import {validators} from "./build-in-validators";
 
type RuleResult = {
  valid: boolean
};
 
type RuleFunction = (data: Object) => RuleResult;
 
interface OriginConfig{
    [propName: string]: string
}
 
export {RuleResult, RuleFunction};
 
export function rules(config: OriginConfig): RuleFunction {
    let realRules = originRulesAnalyse(config),
        ruleFn = getRuleFunction(realRules);
 
    return ruleFn;
}
 
function getRuleFunction(realRules: RealRules): RuleFunction{
    return  (data) => {
        for(let fieldName in realRules){
            let filedItem = realRules[fieldName],
                dataItem = data[fieldName];
 
            for(let ruleItem of filedItem){
                let valid = validators[ruleItem.method].apply(null, [dataItem].concat(ruleItem.params));
 
 
                if(!valid){
                    return {valid: false};
                }
            }
        }
 
        return {valid: true};
    }
}