import { curryN } from 'ramda'; import renameKeys from './renameKeys'; /** * Creates a new object with the own properties of the provided object, and the * keys copied according to the keysMap object as `{oldKey: newKey}`. * When no key from the keysMap is found, then a shallow clone of an object is returned. * * Keep in mind that in the case of keys conflict is behaviour undefined and * the result may vary between various JS engines! * * @func copyKeys * @memberOf RA * @category Object * @sig {a: b} -> {a: *} -> {b: *} * @param {!Object} keysMap * @param {!Object} obj * @return {!Object} New object with copied keys * @see {@link RA.renameKeys|renameKeys} * @example * * copyKeys({ a: 'b' }, { a: true }); //=> { a: true, b: true } * copyKeys({ a: 'b' }, { a: true, b: false }); //=> { a: true, b: true } */ const copyKeys = curryN(2, (keysMap, obj) => ({ ...obj, ...renameKeys(keysMap, obj), })); export default copyKeys;