eteveniet
Version:
Options-defaults design pattern implementation for reliable configuration. It merges objects deeply, overrides arrays and classes (different than Object) and the result remains strongly typed.
2 lines (1 loc) • 400 B
JavaScript
const o=["__proto__","constructor","prototype"],t=(r,...c)=>(c.forEach((c=>{c&&"object"==typeof c&&Object.entries(c).forEach((([c,e])=>{if(o.includes(c))return;const n="object"==typeof e,s=n&&"Object"!==(null==e?void 0:e.constructor.name);null===e||!n||Array.isArray(e)||s?r[c]=e:(r[c]||(r[c]={}),t(r[c],e))}))})),r),r=(o,r,c,e,n,s,p,...u)=>t({},o,r,c,e,n,s,p,...u);export{r as defaults,t as merge};