abolish
Version:
A javascript object validator.
96 lines (95 loc) • 2.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Rule = Rule;
exports.RuleTyped = RuleTyped;
exports.Schema = Schema;
exports.SchemaTyped = SchemaTyped;
const StringToRules_1 = __importDefault(require("./StringToRules"));
/**
* Converts an array of rules (string | object)[] to one object rule
* @example
* const rule = Rule(['required', {min: 10, max: 20}, '!exact'])
* // will return
* { required: true, min: 10, max: 20, exact: false }
*
* @param rules
* @constructor
*/
function Rule(rules) {
/**
* Convert to array if not array.
*/
if (!Array.isArray(rules))
rules = [rules];
/**
* Stores generated rules
*/
let generatedRule = {};
/**
* Loop Through each rule
*
* 1. convert to object if string
* 2. add rule to generatedRule object
*/
for (let rule of rules) {
if (typeof rule === "string")
rule = (0, StringToRules_1.default)(rule);
generatedRule = { ...generatedRule, ...rule };
}
return generatedRule;
}
/**
* Typed version of Rule
* @param rule
* @constructor
*/
function RuleTyped(rule) {
return Rule(rule);
}
/**
* Parse object value as rule
* @param rules
* @constructor
*/
function Schema(rules) {
/**
* Stores generated rules
*/
let generatedRule = {};
/**
* Loop Through each rule
*
* 1. convert to object if string
* 2. add rule to generatedRule object
*/
for (let key of Object.keys(rules)) {
let rule = rules[key];
/**
* Exclude non rule related super keys e.g $include
*/
if (key === "$include") {
generatedRule[key] = rule;
}
else {
if (typeof rule === "string") {
rule = (0, StringToRules_1.default)(rule);
}
else if (Array.isArray(rule)) {
rule = Rule(rule);
}
generatedRule[key] = rule;
}
}
return generatedRule;
}
/**
* Parse object value as rule
* @param rules
* @constructor
*/
function SchemaTyped(rules) {
return Schema(rules);
}