Reference Source

js/utils/obj_diff.js


// COMMON IMPORTS
import T from '../utils/types'



// RETURN DIFFERENT (KEYS PATH, VALUE) BETWEEN TWO JS CONFIG
const diff = function(config_1, config_2)
{
	if (! config_1)
	{
		return config_2 ? config_2 : null
	}
	
	if (! config_2)
	{
		return config_1 ? config_1 : null
	}
	
	if ( T.isObject(config_1) && ! T.isObject(config_2) )
	{
		return null
	}
	
	if ( ! T.isObject(config_1) && T.isObject(config_2) )
	{
		return null
	}
	
	if ( T.isArray(config_1) && ! T.isArray(config_2) )
	{
		return null
	}
	
	if ( ! T.isArray(config_1) && T.isArray(config_2) )
	{
		return null
	}
	
	let keys_1 = Object.keys(config_1)
	let keys_2 = Object.keys(config_2)
	
	// LOOP ON CONFIG 1
	keys_1.forEach(
		(key_1) => {
			let value_1 = config_1[key_1]
			if (keys_2.indexOf(key_1) < 0)
			{
				return value_1
			}
			
			let value_2 = config_2[key_1]
			if ( T.isObject(value_2) )
			{
				return diff(value_1, value_2)
			}
		}
	)
}

export default diff