UNPKG

@goatlab/fluent

Version:

Readable query Interface & API generator for TS and Node

70 lines 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clearEmpties = void 0; const bson_1 = require("bson"); /** * Deeply removes all empty and nullish values from a * given object * @param object * @returns */ const clearEmpties = (object) => { if (Array.isArray(object)) { return clearEmptiesFromArray(object); } if (typeof object === 'object' && object !== null) { return clearEmptiesFromObject(object); } return object; }; exports.clearEmpties = clearEmpties; function isEmptyValue(value) { return (value === null || value === undefined || (Array.isArray(value) && value.length === 0)); } function isProcessableObject(value) { return (value && typeof value === 'object' && !(value instanceof Date) && !(value instanceof bson_1.ObjectId)); } function clearEmptiesFromArray(arr) { // Process arrays backwards to handle splicing correctly for (let i = arr.length - 1; i >= 0; i--) { const value = arr[i]; if (isProcessableObject(value)) { (0, exports.clearEmpties)(value); if (Array.isArray(value) ? value.length === 0 : Object.keys(value).length === 0) { arr.splice(i, 1); } } else if (isEmptyValue(value)) { arr.splice(i, 1); } } return arr; } function clearEmptiesFromObject(obj) { for (const key in obj) { if (!Object.hasOwn(obj, key)) { continue; } const value = obj[key]; if (isEmptyValue(value)) { delete obj[key]; } else if (isProcessableObject(value)) { (0, exports.clearEmpties)(value); if (Array.isArray(value) ? value.length === 0 : Object.keys(value).length === 0) { delete obj[key]; } } } return obj; } //# sourceMappingURL=clearEmpties.js.map