@hypernym/merge
Version:
Type-safe deep merge utility.
1 lines • 553 B
JavaScript
const e=e=>Object.prototype.toString.call(e).slice(8,-1),t=e=>e===null,n=e=>e===void 0,r=e=>Array.isArray(e),i=t=>e(t)===`Object`;function a(e,o){let{rules:s,depth:c=6}=o||{};return e.reduce((e,l)=>(e&&l&&Object.keys(l).forEach(u=>{if(![`__proto__`,`constructor`,`prototype`].includes(u)){if(c<=0&&i(l[u])){e[u]={};return}r(e[u])&&r(l[u])?e[u]=s?.array===`override`?l[u]:[...e[u],...l[u]]:i(e[u])&&i(l[u])?e[u]=a([e[u],l[u]],{...o,depth:c-1}):e[u]=n(l[u])?s?.undefined===`skip`?e[u]:l[u]:t(l[u])&&s?.null===`skip`?e[u]:l[u]}}),e),{})}export{a as merge};