jsm-utilities
Version:
A utilities library.
232 lines (231 loc) • 8.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAggregateNumberRangeFilter = exports.createNumberFilter = exports.createAggregateDateRangeFilter = exports.createAggregateStringFilter = exports.createDateRangeFilter = exports.createBooleanFilter = exports._createStringFilter = exports.createStringFilter = void 0;
const mongodb_1 = require("mongodb");
const numbers_1 = require("../../../common/numbers");
const createStringFilter = (q, totalQ, value, field, omit, operator = "or") => {
if (mongodb_1.ObjectId.isValid(value)) {
value = value.toString();
}
if (value && typeof value === "object" && "0" in value && "1" in value) {
value = Object.values(value);
}
if ((value && typeof value !== "object") ||
(value instanceof Array && value.length) ||
value === null) {
if (Array.isArray(field)) {
q = q === null || q === void 0 ? void 0 : q.where({
[omit ? "$and" : "$or"]: field.map((_field) => ({
[_field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
})),
});
totalQ = totalQ
? totalQ.where({
[omit || operator === "and" ? "$and" : "$or"]: field.map((_field) => ({
[_field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
})),
})
: totalQ;
}
else {
q = q === null || q === void 0 ? void 0 : q.where({
[field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
});
totalQ = totalQ
? totalQ.where({
[field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
})
: totalQ;
}
}
return { q, totalQ };
};
exports.createStringFilter = createStringFilter;
/**
* @deprecated now using multi fileds with AND OR operators
*/
const _createStringFilter = (q, totalQ, value, field, omit) => {
if (mongodb_1.ObjectId.isValid(value)) {
value = value.toString();
}
if (value && typeof value === "object" && "0" in value && "1" in value) {
value = Object.values(value);
}
if ((value && typeof value !== "object") ||
(value instanceof Array && value.length) ||
value === null) {
q = q === null || q === void 0 ? void 0 : q.where({
[field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
});
totalQ = totalQ
? totalQ.where({
[field]: value instanceof Array
? { [omit ? "$nin" : "$in"]: value }
: omit
? { $ne: value }
: value,
})
: totalQ;
}
return { q, totalQ };
};
exports._createStringFilter = _createStringFilter;
const createBooleanFilter = (q, totalQ, value, field) => {
if (value === "true" || value === "1" || value === 1 || value === true)
value = true;
else if (value === "false" || value === "0" || value === 0 || value === false)
value = false;
else
value = undefined;
if (value !== undefined) {
q = q === null || q === void 0 ? void 0 : q.where({ [field]: value });
totalQ = totalQ
? totalQ.where({ [field]: value })
: totalQ;
}
return { q, totalQ };
};
exports.createBooleanFilter = createBooleanFilter;
const createDateRangeFilter = (q, totalQ, value, field) => {
if (value) {
if (typeof value === "object" &&
value.start) {
if (value.end) {
q = q === null || q === void 0 ? void 0 : q.where({
[field]: {
$gte: new Date(value.start),
$lte: new Date(value.end),
},
});
totalQ = totalQ
? totalQ.where({
[field]: {
$gte: new Date(value.start),
$lte: new Date(value.end),
},
})
: totalQ;
}
else {
q = q === null || q === void 0 ? void 0 : q.where({
[field]: { $gte: new Date(value.start) },
});
totalQ = totalQ
? totalQ.where({
[field]: { $gte: new Date(value.start) },
})
: totalQ;
}
}
else {
q = q === null || q === void 0 ? void 0 : q.where({
[field]: { $gte: new Date(value) },
});
totalQ = totalQ
? totalQ.where({
[field]: { $gte: new Date(value) },
})
: totalQ;
}
}
return { q, totalQ };
};
exports.createDateRangeFilter = createDateRangeFilter;
const createAggregateStringFilter = (match, value, field) => {
if (!value)
return match;
if (typeof value === "object" && "0" in value && "1" in value) {
value = Object.values(value);
}
if ((value && typeof value === "string") ||
(value instanceof Array && value.length > 0))
match[field] =
value instanceof Array ? { $in: value } : value;
return match;
};
exports.createAggregateStringFilter = createAggregateStringFilter;
const createAggregateDateRangeFilter = (match, value, field) => {
if (value) {
if (typeof value === "object" &&
value.start) {
if (value.end)
match[field] = {
$gte: new Date(value.start),
$lte: new Date(value.end),
};
else
match[field] = { $gte: new Date(value.start) };
}
else
match[field] = { $gte: new Date(value) };
}
return match;
};
exports.createAggregateDateRangeFilter = createAggregateDateRangeFilter;
const createNumberFilter = (q, totalQ, value, field) => {
if (value || value === 0) {
let filter;
if ((0, numbers_1.isNumberRange)(value)) {
if (value.min && value.max) {
filter = { $gte: value.min, $lte: value.max };
}
else if (value.min) {
filter = { $gte: value.min };
}
else if (value.max) {
filter = { $lte: value.max };
}
}
else if (typeof value === "number") {
filter = value;
}
if (filter || filter === 0) {
q = q === null || q === void 0 ? void 0 : q.where({ [field]: filter });
totalQ = totalQ
? totalQ.where({ [field]: filter })
: totalQ;
}
}
return { q, totalQ };
};
exports.createNumberFilter = createNumberFilter;
const createAggregateNumberRangeFilter = (match, value, field) => {
if (value || value === 0) {
if ((0, numbers_1.isNumberRange)(value)) {
if (value.min && value.max) {
match[field] = { $gte: value.min, $lte: value.max };
}
else if (value.min) {
match[field] = { $gte: value.min };
}
else if (value.max) {
match[field] = { $lte: value.max };
}
}
else if (typeof value === "number") {
match[field] = value;
}
}
return match;
};
exports.createAggregateNumberRangeFilter = createAggregateNumberRangeFilter;