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