/** * @summary defaults * @version 3.0.0 * @since 1.0.0 * @author Arian Khosravi<arian.khosravi@aofl.com> */ /** * Assigns missing defaultOptions onto the target object. * * @memberof module:@aofl/object-utils * * @param {Object} target * @param {Object} defaultOptions * * @return {Object} */ const defaults = (target, defaults) => { const recurse = (t, d) => { for (const key in d) { /* istanbul ignore next */ if (!Object.prototype.hasOwnProperty.call(d, key)) continue; if (typeof t[key] === 'undefined') { if (Array.isArray(d[key])) { t[key] = [].concat(d[key]); } else if (typeof d[key] === 'object') { t[key] = {}; recurse(t[key], d[key]); } else { t[key] = d[key]; } } else { if (typeof t[key] === 'object' && !Array.isArray(t[key])) { recurse(t[key], d[key]); } } } }; recurse(target, defaults); }; export {defaults};