UNPKG

ih-black-lion

Version:

State handler for Arus projects

53 lines (48 loc) 1.42 kB
import { clone, isArrayLike as isArray, keys, reject } from 'ramda'; const toCamelCase = (str) => { const words = str.toLowerCase().split('_'); let camelCase = ''; for (let i = 0; i < words.length; i += 1) { if (i > 0) { words[i] = words[i][0].toUpperCase() + words[i].substr(1); } camelCase += words[i]; } return camelCase; }; const serializeKeys = (keyArray, obj) => { const res = {}; for (let i = 0; i < keyArray.length; i += 1) { const key = keyArray[i]; const fieldName = toCamelCase(key); let value = obj[key]; if (isArray(value) && value.length === 1) { value = value[0]; } if (typeof value === 'object') { // If value is indexed like an array if (isArray(value)) { const values = []; for (let j = 0; value[j] !== undefined; j += 1) { values.push(serialize(value[j])); } value = values; } else { value = serialize(value); } } res[fieldName] = value; } return res; }; export default function serialize(obj) { const metadata = clone(obj.$); // Grabs the keys from `obj` omitting the `$` key that is usually present const keyArray = reject(key => key === '$', keys(obj)); // If meta data existed then set it to the value of `meta` in `obj` if (metadata) { obj.meta = metadata; keyArray.push('meta'); } return serializeKeys(keyArray, obj); }