1- import { defu } from 'defu'
21import type { EnvironmentContext , Log , LogLevel , LoggerConfig , RequestLogger , RequestLoggerOptions , SamplingConfig , TailSamplingContext , WideEvent } from './types'
32import { colors , detectEnvironment , formatDuration , getConsoleMethod , getLevelColor , isDev , matchesPattern } from './utils'
43
4+ function isPlainObject ( val : unknown ) : val is Record < string , unknown > {
5+ return val !== null && typeof val === 'object' && ! Array . isArray ( val )
6+ }
7+
8+ function deepDefaults ( base : Record < string , unknown > , defaults : Record < string , unknown > ) : Record < string , unknown > {
9+ const result = { ...base }
10+ for ( const key in defaults ) {
11+ const baseVal = result [ key ]
12+ const defaultVal = defaults [ key ]
13+ if ( baseVal === undefined || baseVal === null ) {
14+ result [ key ] = defaultVal
15+ } else if ( isPlainObject ( baseVal ) && isPlainObject ( defaultVal ) ) {
16+ result [ key ] = deepDefaults ( baseVal , defaultVal )
17+ }
18+ }
19+ return result
20+ }
21+
522let globalEnv : EnvironmentContext = {
623 service : 'app' ,
724 environment : 'development' ,
@@ -221,7 +238,7 @@ export function createRequestLogger(options: RequestLoggerOptions = {}): Request
221238
222239 return {
223240 set < T extends Record < string , unknown > > ( data : T ) : void {
224- context = defu ( data , context ) as Record < string , unknown >
241+ context = deepDefaults ( data , context ) as Record < string , unknown >
225242 } ,
226243
227244 error ( error : Error | string , errorContext ?: Record < string , unknown > ) : void {
@@ -236,7 +253,7 @@ export function createRequestLogger(options: RequestLoggerOptions = {}): Request
236253 stack : err . stack ,
237254 } ,
238255 }
239- context = defu ( errorData , context ) as Record < string , unknown >
256+ context = deepDefaults ( errorData , context ) as Record < string , unknown >
240257 } ,
241258
242259 emit ( overrides ?: Record < string , unknown > & { _forceKeep ?: boolean } ) : WideEvent | null {
0 commit comments