Home Reference Source

scripts/utils/extend.js

'use strict'

import { isObject } from './isobject.js'

/**
 * Extends an object with another object
 * @param {Object} o1 The object to be extended
 * @param {Object} o2 The object to extend with
 * @return {Object} Returns the source object
 */
export let extend = ( o1, o2 ) => {
  if ( isObject( o1 ) && isObject( o2 ) ) {
    let keys = Object.keys( Object.assign( {}, o1, o2 ) )
    for ( let i = 0; i < keys.length; i++ ) {
      o1[ keys[i] ] = extend( o1[ keys[ i ] ], o2[ keys[ i ] ] )
    }
  } else if ( o2 !== undefined ) {
    return o2
  }
  return o1
}