topkat-utils
Version:
A comprehensive collection of TypeScript/JavaScript utility functions for common programming tasks. Includes validation, object manipulation, date handling, string formatting, and more. Zero dependencies, fully typed, and optimized for performance.
51 lines • 1.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.mongoPush = exports.mongoFilterMerger = exports.getId = void 0;
//----------------------------------------
// MONGO UTILS
//----------------------------------------
const validation_utils_1 = require("./validation-utils");
const isset_1 = require("./isset");
/** @return undefined if cannot find _id */
function getId(obj) {
if (!obj)
return; // null case
if (obj._id)
return obj._id.toString();
else if ((0, validation_utils_1.isType)(obj, 'objectId'))
return obj.toString();
else
return;
}
exports.getId = getId;
/** Merge filter with correct handling of OR and AND
* @param {Object} filterA
* @param {Object} filterB
* @param {Boolean} assignToFilterA defualt false: if true, it will modify filterA, else it will return merged filters as a new object
*/
function mongoFilterMerger(filterA, filterB, assignToFilterA = false) {
if ((0, isset_1.isset)(filterA.$and) && (0, isset_1.isset)(filterB.$and)) {
filterA.$and.push(...filterB.$and);
delete filterB.$and;
}
if ((0, isset_1.isset)(filterA.$or) && (0, isset_1.isset)(filterB.$or)) {
if (!(0, isset_1.isset)(filterA.$and))
filterA.$and = [];
filterA.$and.push({ $or: filterA.$or }, { $or: filterA.$or });
delete filterB.$or;
}
if (assignToFilterA) {
Object.assign(filterA, filterB);
return filterA;
}
else
return { ...filterA, ...filterB };
}
exports.mongoFilterMerger = mongoFilterMerger;
function mongoPush(field, value, fields) {
if (!(0, isset_1.isset)(fields.$push))
fields.$push = {};
fields.$push[field] = value;
}
exports.mongoPush = mongoPush;
//# sourceMappingURL=mongo-utils.js.map