rubico
Version:
[a]synchronous functional programming
8 lines (7 loc) • 995 B
JavaScript
/**
* rubico v2.6.2
* https://github.com/a-synchronous/rubico
* (c) 2019-2024 Richard Tong
* rubico may be freely distributed under the MIT license.
*/
const isArray=Array.isArray,arrayDefaultsDeepFromArray=function(r,e){const t=e.length,c=r.slice();let o=-1;for(;++o<t;){const t=r[o],a=e[o];isArray(t)&&isArray(a)?c[o]=arrayDefaultsDeepFromArray(t,a):null==t?c[o]=a:null==a?c[o]=t:t.constructor==Object&&a.constructor==Object?c[o]=objectDefaultsDeepFromObject(t,a):c[o]=t}return c},objectDefaultsDeepFromObject=function(r,e){const t={...r};for(const c in e){const o=r[c],a=e[c];isArray(o)&&isArray(a)?t[c]=arrayDefaultsDeepFromArray(o,a):null==o?t[c]=a:null==a?t[c]=o:o.constructor==Object&&a.constructor==Object?t[c]=objectDefaultsDeepFromObject(o,a):t[c]=o}return t},defaultsDeep=r=>function(e){return isArray(e)&&isArray(r)?arrayDefaultsDeepFromArray(e,r):null==e||null==r?e:e.constructor==Object&&r.constructor==Object?objectDefaultsDeepFromObject(e,r):e};export default defaultsDeep;