import { entries, isArray, isPlainObject } from './helper.js'; /** Deep merge objects to the first one */ export const deepAssign = (originObject, ...overrideObjects) => { if (overrideObjects.length === 0) return originObject; /** Object being merged */ const assignObject = overrideObjects.shift() || null; if (assignObject) entries(assignObject).forEach(([property, value]) => { if (property === '__proto__' || property === 'constructor') return; if (isPlainObject(originObject[property]) && isPlainObject(value)) deepAssign(originObject[property], value); else if (isArray(value)) originObject[property] = [...value]; else if (isPlainObject(value)) originObject[property] = { ...value, }; else originObject[property] = assignObject[property]; }); return deepAssign(originObject, ...overrideObjects); };