UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

48 lines 1.68 kB
"use strict"; 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