redis-orm-node
Version:
`redis-orm` is a lightweight Object-Relational Mapping (ORM) library for Node.js.
32 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OperatorMapper = void 0;
const redis_1 = require("redis");
const utils_1 = require("../utils");
const FindOperators_1 = require("../operators/FindOperators");
const escapeSpecialChars = (srt) => srt.replace(/[`,.<>{}[\]"':;!@#$%^&*()\-+=~\s]/g, match => "\\" + match);
const OperatorfieldTypeError = (operatorType, propertyType) => new Error(`Operator ${operatorType} not supported with ${propertyType.toLocaleLowerCase()} field types.`);
function OperatorMapper({ type, value }, propertyName, propertyType) {
switch (type) {
case "equal":
if (propertyType === redis_1.SchemaFieldTypes.TAG)
return `@${propertyName}:{${escapeSpecialChars(value + "")}}`;
else if (propertyType === redis_1.SchemaFieldTypes.NUMERIC)
return `@${propertyName}:[${value} ${value}]`;
else
throw OperatorfieldTypeError("equal", propertyType);
case "like":
if (propertyType === redis_1.SchemaFieldTypes.TEXT)
return `@${propertyName}:(${value})`;
else if (propertyType === redis_1.SchemaFieldTypes.TAG)
return `@${propertyName}:{${value}}`;
else
throw OperatorfieldTypeError("like", propertyType);
case "not":
return "-" + OperatorMapper((0, utils_1.isFindOperator)(value) ? value : (0, FindOperators_1.Equal)(value), propertyName, propertyType);
default:
throw new Error(`Operator ${type} not supported.`);
}
}
exports.OperatorMapper = OperatorMapper;
//# sourceMappingURL=operators.js.map