@react-awesome-query-builder/core
Version:
User-friendly query builder for React. Core
79 lines (77 loc) • 3.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mongoFormatOp2 = exports.mongoFormatOp1 = exports.mongoFieldUnescape = exports.mongoFieldEscape = exports.mongoEmptyValue = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var mongoEmptyValue = exports.mongoEmptyValue = function mongoEmptyValue(fieldDef) {
var v = "";
var type = fieldDef === null || fieldDef === void 0 ? void 0 : fieldDef.type;
if (type == "number") {
v = 0;
}
return v;
};
// helpers for mongo format
var mongoFormatOp1 = exports.mongoFormatOp1 = function mongoFormatOp1(mop, mc, opNot, field, _op, value, not, useExpr, valueSrc, valueType, opDef, operatorOptions, fieldDef) {
var $field = typeof field == "string" && !field.startsWith("$") ? "$" + field : field;
var mv = mc(value, fieldDef);
if (mv === undefined) return undefined;
var neg = not ^ opNot;
if (useExpr && mop == "$nin") {
// There is only `$in` aggregation operator but not `$nin` (`$nin` is only a query operator)
// https://www.mongodb.com/docs/manual/reference/operator/aggregation/in/
neg = !neg;
mop = "$in";
}
if (useExpr && mop == "$regex") {
// https://stackoverflow.com/questions/35750920/regex-as-filter-in-projection
var e = {
"$regexFind": {
input: $field,
regex: mv
}
};
if (neg) {
e = {
"$not": e
};
}
return e;
}
if (neg) {
// if (!useExpr && (!mop || mop == "$eq"))
// return { [field]: { "$ne": mv } }; // short form
return !useExpr ? (0, _defineProperty2["default"])({}, field, {
"$not": (0, _defineProperty2["default"])({}, mop, mv)
}) : {
"$not": (0, _defineProperty2["default"])({}, mop, [$field, mv])
};
} else {
if (!useExpr && (!mop || mop == "$eq")) return (0, _defineProperty2["default"])({}, field, mv); // short form
return !useExpr ? (0, _defineProperty2["default"])({}, field, (0, _defineProperty2["default"])({}, mop, mv)) : (0, _defineProperty2["default"])({}, mop, [$field, mv]);
}
};
var mongoFormatOp2 = exports.mongoFormatOp2 = function mongoFormatOp2(mops, opNot, field, _op, values, not, useExpr, valueSrcs, valueTypes, opDef, operatorOptions, fieldDef) {
var $field = typeof field == "string" && !field.startsWith("$") ? "$" + field : field;
if (not ^ opNot) {
return !useExpr ? (0, _defineProperty2["default"])({}, field, {
"$not": (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, mops[0], values[0]), mops[1], values[1])
}) : {
"$not": {
"$and": [(0, _defineProperty2["default"])({}, mops[0], [$field, values[0]]), (0, _defineProperty2["default"])({}, mops[1], [$field, values[1]])]
}
};
} else {
return !useExpr ? (0, _defineProperty2["default"])({}, field, (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, mops[0], values[0]), mops[1], values[1])) : {
"$and": [(0, _defineProperty2["default"])({}, mops[0], [$field, values[0]]), (0, _defineProperty2["default"])({}, mops[1], [$field, values[1]])]
};
}
};
var mongoFieldEscape = exports.mongoFieldEscape = function mongoFieldEscape(input) {
return input.replace(/\$/g, "\uFF04");
};
var mongoFieldUnescape = exports.mongoFieldUnescape = function mongoFieldUnescape(input) {
return input.replace(/\uFF04/g, "$");
};