@openhps/core
Version:
Open Hybrid Positioning System - Core component
48 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SerializationUtils = exports.mergeDeep = exports.isObject = exports.cloneDeep = void 0;
const cloneDeep = require('lodash.clonedeep'); // eslint-disable-line
exports.cloneDeep = cloneDeep;
/**
* Check if something is an object
* @param {any} item Item to check for object
* @returns {boolean} Is an object
*/
function isObject(item) {
return item && typeof item === 'object' && !Array.isArray(item);
}
exports.isObject = isObject;
/**
* Deep merge objects
* @param {any} target Target object
* @param {any} source Source object
* @returns {any} Merged object
*/
function mergeDeep(target, source) {
const output = cloneDeep(target);
if (isObject(target) && isObject(source)) {
Object.keys(source).forEach((key) => {
if (Array.isArray(source[key])) {
output[key] = source[key];
const targetProperty = target[key] !== undefined ? (Array.isArray(target[key]) ? target[key] : [target[key]]) : [];
output[key].push(...targetProperty.filter((val) => !source[key].includes(val)));
}
else if (isObject(source[key])) {
if (!(key in target))
Object.assign(output, { [key]: source[key] });
else
output[key] = mergeDeep(target[key], source[key]);
}
else {
Object.assign(output, { [key]: source[key] });
}
});
}
return output;
}
exports.mergeDeep = mergeDeep;
exports.SerializationUtils = {
cloneDeep,
mergeDeep,
};
//# sourceMappingURL=utils.js.map