abolish
Version:
A javascript object validator.
73 lines (72 loc) • 2.08 kB
JavaScript
;
/**
* Find key or !key
* @type {RegExp}
*/
const onlyKey = new RegExp(/([!a-zA-Z_*0-9]+)/g);
/**
* Find key:name
* @type {RegExp}
*/
const keyColumnVal = new RegExp(/([a-zA-Z_*0-9]+:[a-zA-Z_0-9]+)/g);
/**
* Find key:"string"
* @type {RegExp}
*/
const keyColumnValStringDoubleQuotes = new RegExp(/([a-zA-Z_*0-9]+:"[^"]+")/g);
/**
* Find key:'string'
* @type {RegExp}
*/
const keyColumnValStringSingleQuotes = new RegExp(/([a-zA-Z_*0-9]+:'[^']+')/g);
/**
* Find key:`string`
* @type {RegExp}
*/
const keyColumnValStringGraveAccent = new RegExp(/([a-zA-Z_*0-9]+:`[^`]+`)/g);
/**
* StringToRules
* @description
* Convert string to rule object
* @param str
* @constructor
*/
const StringToRules = (str) => {
let s = str.split("|");
const keyColumnValObj = {};
for (let i = 0; i < s.length; i++) {
const pair = s[i];
if (pair.match(keyColumnValStringSingleQuotes) ||
pair.match(keyColumnValStringDoubleQuotes) ||
pair.match(keyColumnValStringGraveAccent)) {
const [key, ...value] = pair.split(":");
let valueToString = value.join(":");
valueToString = valueToString.substring(1);
valueToString = valueToString.substring(0, value.length - 1);
keyColumnValObj[key] = valueToString;
}
else if (pair.match(keyColumnVal)) {
let [key, value] = pair.split(":");
if (!isNaN(value)) {
value = Number(value);
}
keyColumnValObj[key] = value;
}
else if (pair.match(onlyKey)) {
/**
* If key is like "key|" or "!key|"
* ==> {key: true} or {key: false}
*/
let key = pair;
let value = true;
// if !key set value to false
if (key.substring(0, 1) === "!") {
key = key.substring(1);
value = false;
}
keyColumnValObj[key] = value;
}
}
return keyColumnValObj;
};
module.exports = StringToRules;