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
JavaScript
;
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;
}