@@ -571,7 +571,7 @@ describe('consola integration', () => {
571571 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
572572 'consola.type' : { value : 'debug' , type : 'string' } ,
573573 'consola.level' : { value : 4 , type : 'integer' } ,
574- 'consola.context .0' : { value : '[1,2,3,4,5]' , type : 'string' } ,
574+ 'consola.args .0' : { value : '[1,2,3,4,5]' , type : 'string' } ,
575575 } ,
576576 } ,
577577 {
@@ -620,4 +620,115 @@ describe('consola integration', () => {
620620
621621 await runner . completed ( ) ;
622622 } ) ;
623+
624+ test ( 'should preserve special objects (Date, Error, RegExp, Map, Set) as context attributes' , async ( ) => {
625+ const runner = createRunner ( __dirname , 'subject-special-objects.ts' )
626+ . expect ( {
627+ log : {
628+ items : [
629+ {
630+ timestamp : expect . any ( Number ) ,
631+ level : 'info' ,
632+ body : 'Current time:' ,
633+ severity_number : expect . any ( Number ) ,
634+ trace_id : expect . any ( String ) ,
635+ attributes : {
636+ 'sentry.origin' : { value : 'auto.log.consola' , type : 'string' } ,
637+ 'sentry.release' : { value : '1.0.0' , type : 'string' } ,
638+ 'sentry.environment' : { value : 'test' , type : 'string' } ,
639+ 'sentry.sdk.name' : { value : 'sentry.javascript.node' , type : 'string' } ,
640+ 'sentry.sdk.version' : { value : expect . any ( String ) , type : 'string' } ,
641+ 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
642+ 'consola.type' : { value : 'info' , type : 'string' } ,
643+ 'consola.level' : { value : 3 , type : 'integer' } ,
644+ // Date objects serialize with extra quotes
645+ 'consola.args.0' : { value : '"2023-01-01T00:00:00.000Z"' , type : 'string' } ,
646+ } ,
647+ } ,
648+ {
649+ timestamp : expect . any ( Number ) ,
650+ level : 'error' ,
651+ body : 'Error occurred:' ,
652+ severity_number : expect . any ( Number ) ,
653+ trace_id : expect . any ( String ) ,
654+ attributes : {
655+ 'sentry.origin' : { value : 'auto.log.consola' , type : 'string' } ,
656+ 'sentry.release' : { value : '1.0.0' , type : 'string' } ,
657+ 'sentry.environment' : { value : 'test' , type : 'string' } ,
658+ 'sentry.sdk.name' : { value : 'sentry.javascript.node' , type : 'string' } ,
659+ 'sentry.sdk.version' : { value : expect . any ( String ) , type : 'string' } ,
660+ 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
661+ 'consola.type' : { value : 'error' , type : 'string' } ,
662+ 'consola.level' : { value : 0 , type : 'integer' } ,
663+ // Error objects serialize as empty object (properties are non-enumerable)
664+ 'consola.args.0' : { value : '{}' , type : 'string' } ,
665+ } ,
666+ } ,
667+ {
668+ timestamp : expect . any ( Number ) ,
669+ level : 'info' ,
670+ body : 'Pattern:' ,
671+ severity_number : expect . any ( Number ) ,
672+ trace_id : expect . any ( String ) ,
673+ attributes : {
674+ 'sentry.origin' : { value : 'auto.log.consola' , type : 'string' } ,
675+ 'sentry.release' : { value : '1.0.0' , type : 'string' } ,
676+ 'sentry.environment' : { value : 'test' , type : 'string' } ,
677+ 'sentry.sdk.name' : { value : 'sentry.javascript.node' , type : 'string' } ,
678+ 'sentry.sdk.version' : { value : expect . any ( String ) , type : 'string' } ,
679+ 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
680+ 'consola.type' : { value : 'info' , type : 'string' } ,
681+ 'consola.level' : { value : 3 , type : 'integer' } ,
682+ // RegExp objects serialize as empty object
683+ 'consola.args.0' : { value : '{}' , type : 'string' } ,
684+ } ,
685+ } ,
686+ {
687+ timestamp : expect . any ( Number ) ,
688+ level : 'info' ,
689+ body : 'Collections:' ,
690+ severity_number : expect . any ( Number ) ,
691+ trace_id : expect . any ( String ) ,
692+ attributes : {
693+ 'sentry.origin' : { value : 'auto.log.consola' , type : 'string' } ,
694+ 'sentry.release' : { value : '1.0.0' , type : 'string' } ,
695+ 'sentry.environment' : { value : 'test' , type : 'string' } ,
696+ 'sentry.sdk.name' : { value : 'sentry.javascript.node' , type : 'string' } ,
697+ 'sentry.sdk.version' : { value : expect . any ( String ) , type : 'string' } ,
698+ 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
699+ 'consola.type' : { value : 'info' , type : 'string' } ,
700+ 'consola.level' : { value : 3 , type : 'integer' } ,
701+ // Map converted to object, Set converted to array
702+ 'consola.args.0' : { value : '{"key":"value"}' , type : 'string' } ,
703+ 'consola.args.1' : { value : '[1,2,3]' , type : 'string' } ,
704+ } ,
705+ } ,
706+ {
707+ timestamp : expect . any ( Number ) ,
708+ level : 'info' ,
709+ body : 'Mixed data' ,
710+ severity_number : expect . any ( Number ) ,
711+ trace_id : expect . any ( String ) ,
712+ attributes : {
713+ 'sentry.origin' : { value : 'auto.log.consola' , type : 'string' } ,
714+ 'sentry.release' : { value : '1.0.0' , type : 'string' } ,
715+ 'sentry.environment' : { value : 'test' , type : 'string' } ,
716+ 'sentry.sdk.name' : { value : 'sentry.javascript.node' , type : 'string' } ,
717+ 'sentry.sdk.version' : { value : expect . any ( String ) , type : 'string' } ,
718+ 'server.address' : { value : expect . any ( String ) , type : 'string' } ,
719+ 'consola.type' : { value : 'info' , type : 'string' } ,
720+ 'consola.level' : { value : 3 , type : 'integer' } ,
721+ // Plain object properties are extracted
722+ userId : { value : 123 , type : 'integer' } ,
723+ // Date is preserved in context
724+ 'consola.args.0' : { value : '"2023-06-15T12:00:00.000Z"' , type : 'string' } ,
725+ } ,
726+ } ,
727+ ] ,
728+ } ,
729+ } )
730+ . start ( ) ;
731+
732+ await runner . completed ( ) ;
733+ } ) ;
623734} ) ;
0 commit comments