validated-changeset
Version:
Changesets for your local state
51 lines • 1.26 kB
JavaScript
import { getChangeValue, isChange } from '../-private/change';
import isObject from './is-object';
/**
* traverse through target and unset `value` from leaf key so can access normally
* {
* name: Change {
* value: 'Charles'
* }
* }
*
* to
*
* {
* name: 'Charles'
* }
*
* Shallow copy here is fine because we are swapping out the leaf nested object
* rather than mutating a property in something with reference
*
* @method normalizeObject
* @param {Object} target
* @return {Object}
*/
export default function normalizeObject(target, isObj = isObject) {
if (!target || !isObj(target)) {
return target;
}
if (isChange(target)) {
return getChangeValue(target);
}
let obj = Object.assign({}, target);
for (let key in obj) {
const next = obj[key];
if (next && isObj(next)) {
if (isChange(next)) {
obj[key] = getChangeValue(next);
}
else {
try {
JSON.stringify(next);
}
catch (e) {
break;
}
obj[key] = normalizeObject(next);
}
}
}
return obj;
}
//# sourceMappingURL=normalize-object.js.map