'use strict'; const isObject = (obj) => { return obj && typeof obj === 'object' && !Array.isArray(obj); }; const isNotEmptyObject = (obj) => { return obj && typeof obj === 'object' && Object.getOwnPropertyNames(obj).length !== 0; }; const isEmptyObject = (obj) => { return !isNotEmptyObject(obj); }; const merge = (target, ...sources) => { for (const source of sources) { for (const key in source) { if (!Object.prototype.hasOwnProperty.call(source, key)) { continue; } if (isObject(target[key]) && isObject(source[key])) { merge(target[key], source[key]); } else { target[key] = source[key]; } } } return target; }; module.exports = { isObject, isNotEmptyObject, isEmptyObject, merge };