37 lines
775 B
JavaScript
37 lines
775 B
JavaScript
|
'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
|
||
|
};
|