UNPKG

jsm-utilities

Version:
232 lines (231 loc) 8.35 kB
"use strict"; 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;