UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

82 lines (81 loc) 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertObjectValues = convertObjectValues; exports.pickFields = pickFields; exports.deleteFields = deleteFields; exports.pickObjectFieldsByCondition = pickObjectFieldsByCondition; exports.remapFields = remapFields; const non_primitives_1 = require("../guards/non-primitives"); const primitives_1 = require("../guards/primitives"); function convertObjectValues(data, options) { const { keys, convertTo } = options || {}; const _setValueAtPath = (obj, path, convertTo) => { const segments = path.split('.'); let current = obj; segments?.forEach((key, index) => { if (index === segments?.length - 1) { const value = current?.[key]; if (convertTo === 'string' && !(0, primitives_1.isString)(value)) { current[key] = String(value); } else if (convertTo === 'number' && !(0, primitives_1.isNumber)(value)) { current[key] = Number(value); } } else { if ((0, non_primitives_1.isObject)(current?.[key])) { current = current?.[key]; } else { current[key] = {}; current = current?.[key]; } } }); return obj; }; const _convertValue = (obj) => { let newObj = { ...obj }; keys?.forEach((key) => { newObj = _setValueAtPath(newObj, key, convertTo); }); return newObj; }; if (Array.isArray(data)) { return data?.map(_convertValue); } return _convertValue(data); } function pickFields(source, keys) { const result = {}; keys?.forEach((key) => { result[key] = source?.[key]; }); return result; } function deleteFields(source, keys) { const result = {}; for (const key in source) { if (!keys.includes(key)) { result[key] = source?.[key]; } } return result; } function pickObjectFieldsByCondition(source, condition) { const result = {}; Object.entries(source)?.forEach(([key, value]) => { if (condition(key, value)) { result[key] = value; } }); return result; } function remapFields(source, fieldMap) { const result = {}; for (const targetKey in fieldMap) { const sourceKey = fieldMap?.[targetKey]; result[targetKey] = source?.[sourceKey]; } return result; }