@@ -5,9 +5,9 @@ function isObject (val: any) {
55}
66
77// Base function to apply defaults
8- function _defu < T > ( baseObj : T , defaults : any , merger ?: Merger ) : T {
8+ function _defu < T > ( baseObj : T , defaults : any , namespace : string = '.' , merger ?: Merger ) : T {
99 if ( ! isObject ( defaults ) ) {
10- return _defu ( baseObj , { } , merger )
10+ return _defu ( baseObj , { } , namespace , merger )
1111 }
1212
1313 const obj = Object . assign ( { } , defaults )
@@ -23,14 +23,14 @@ function _defu<T> (baseObj: T, defaults: any, merger?: Merger): T {
2323 continue
2424 }
2525
26- if ( merger && merger ( obj , key , val ) ) {
26+ if ( merger && merger ( obj , key , val , namespace ) ) {
2727 continue
2828 }
2929
3030 if ( Array . isArray ( val ) && Array . isArray ( obj [ key ] ) ) {
3131 obj [ key ] = obj [ key ] . concat ( val )
3232 } else if ( isObject ( val ) && isObject ( obj [ key ] ) ) {
33- obj [ key ] = _defu ( val , obj [ key ] , merger )
33+ obj [ key ] = _defu ( val , obj [ key ] , ( namespace ? ` ${ namespace } .` : '' ) + key . toString ( ) , merger )
3434 } else {
3535 obj [ key ] = val
3636 }
@@ -41,22 +41,22 @@ function _defu<T> (baseObj: T, defaults: any, merger?: Merger): T {
4141
4242// Create defu wrapper with optional merger and multi arg support
4343function extend ( merger ?: Merger ) : DefuFn {
44- return ( ...args ) => args . reduce ( ( p , c ) => _defu ( p , c , merger ) , { } as any )
44+ return ( ...args ) => args . reduce ( ( p , c ) => _defu ( p , c , '' , merger ) , { } as any )
4545}
4646
4747// Basic version
4848const defu = extend ( ) as Defu
4949
5050// Custom version with function merge support
51- defu . fn = extend ( ( obj , key , currentValue ) => {
51+ defu . fn = extend ( ( obj , key , currentValue , _namespace ) => {
5252 if ( typeof obj [ key ] !== 'undefined' && typeof currentValue === 'function' ) {
5353 obj [ key ] = currentValue ( obj [ key ] )
5454 return true
5555 }
5656} )
5757
5858// Custom version with function merge support only for defined arrays
59- defu . arrayFn = extend ( ( obj , key , currentValue ) => {
59+ defu . arrayFn = extend ( ( obj , key , currentValue , _namespace ) => {
6060 if ( Array . isArray ( obj [ key ] ) && typeof currentValue === 'function' ) {
6161 obj [ key ] = currentValue ( obj [ key ] )
6262 return true
0 commit comments