src/index.js
function deepAssign(target, source) {
	//if they aren't both objects, use target if it is defined (null/0/false/etc. are OK), otherwise use source
	if (!(target && source && typeof target==='object' && typeof source==='object')) {
		return typeof target !== 'undefined' ? target : source;
	}

	let out = assign({}, target);
	for (let i in source) {
		if (source.hasOwnProperty(i)) {
			out[i] = deepAssign(target[i], source[i]);
		}
	}
	return out;
}
function deepAssign(target, source) {
	//if they aren't both objects, use target if it is defined (null/0/false/etc. are OK), otherwise use source
	if (!(target && source && typeof target==='object' && typeof source==='object')) {
		return typeof target !== 'undefined' ? target : source;
	}

	let out = assign({}, target);
	for (let i in source) {
		if (source.hasOwnProperty(i)) {
			out[i] = deepAssign(target[i], source[i]);
		}
	}
	return out;
}
function deepAssign ( target , source ) { //if they aren't both objects, use target if it is defined (null/0/false/etc. are OK), otherwise use source if ( ! ( target && source && typeof target === 'object' && typeof source === 'object' ) ) { return typeof target !== 'undefined' ? target : source ; } let out = assign ( { } , target ) ; for ( let i in source ) { if ( source . hasOwnProperty ( i ) ) { out [ i ] = deepAssign ( target [ i ] , source [ i ] ) ; } } return out ; }
Recursively copy keys from `source` to `target`, skipping truthy values already in `target` so parent values can block child values
@private
Recursively copy keys from source to target skipping truthy values already in target so parent values can block child values