/**
* @summary deep-freez
* @version 3.0.0
* @since 1.0.0
* @author Arian Khosravi<arian.khosravi@aofl.com>
*/
/**
* Recursively calls Object.freeze on objects properties
*
* @memberof module:@aofl/object-utils
*
* @param {Object} source
* @return {Object}
*/
export function deepFreeze(source) {
Object.freeze(source);
for (const key in source) {
if (Object.hasOwnProperty.call(source, key) && source[key] !== null &&
(typeof source[key] === 'object' || typeof source[key] === 'function') &&
!Object.isFrozen(source[key])) {
deepFreeze(source[key]);
}
}
return source;
}