function mergeDeep(first, second) {
  return mergeWith({}, first, second, (a, b) => (b === null ? a : undefined));
}
A recursive deep-merge that ignores null values when merging.
This returns the merged object and does not mutate.
@param {object} first the first object to get merged
@param {object} second the second object to get merged