unomi-node
Version:
Node.js SDK for the Apache Unomi CDP
53 lines (52 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function queryBuilder(query) {
var validatorRegex = /^(\w\.?)*[\s?]*[=|<|>|>=|<=|\!=|@contains|@!contains|\$|\^|@regex|@in|@!in|@all][\s?]*(".+"|\d+|true|false)$/i;
var key = /^(\w\.?)*/i;
var value = /(".+"|\d+|true|false)$/i;
var operator = /[=|<|>|>=|<=|\!=|@contains|@!contains|\$|\^|@regex|@in|@!in|@all][\s?]/i;
if (!validatorRegex.test(query)) {
throw new Error("Invalid query: " + query);
}
var parseOperator = function () {
switch (query.match(operator)[0].toLowerCase()) {
case "=":
return "equals";
case "!=":
return "notEquals";
case ">=":
return "greaterThanOrEqualTo";
case ">":
return "greaterThan";
case "<=":
return "lessThanOrEqualTo";
case "<":
return "lessThan";
case "@contains":
return "contains";
case "@!contains":
return "notContains";
case "^":
return "startsWith";
case "$":
return "endsWith";
case "@regex":
return "matchesRegex";
case "@in":
return "in";
case "@!in":
return "notIn";
case "@all":
return "all";
}
};
var parseValue = query.match(value)[0]
.replace(/^"/, "")
.replace(/"$/, "");
return {
key: query.match(key)[0],
value: parseValue,
operator: parseOperator()
};
}
exports.queryBuilder = queryBuilder;