@@ -147,7 +147,7 @@ class RelayModernEnvironment implements IEnvironment {
147
147
: 'full' ;
148
148
this . _operationLoader = operationLoader ;
149
149
this . _operationExecutions = new Map ( ) ;
150
- this . _network = config . network ;
150
+ this . _network = this . __wrapNetworkWithLogObserver ( config . network ) ;
151
151
this . _getDataID = config . UNSTABLE_DO_NOT_USE_getDataID ?? defaultGetDataID ;
152
152
this . _publishQueue = new RelayPublishQueue (
153
153
config . store ,
@@ -159,7 +159,8 @@ class RelayModernEnvironment implements IEnvironment {
159
159
this . options = config . options ;
160
160
this . _isServer = config . isServer ?? false ;
161
161
162
- ( this : any ) . __setNet = newNet => ( this . _network = newNet ) ;
162
+ ( this : any ) . __setNet = newNet =>
163
+ ( this . _network = this . __wrapNetworkWithLogObserver ( newNet ) ) ;
163
164
164
165
if ( __DEV__ ) {
165
166
const { inspect} = require ( './StoreInspector' ) ;
@@ -366,20 +367,17 @@ class RelayModernEnvironment implements IEnvironment {
366
367
operation : OperationDescriptor ,
367
368
updater ?: ?SelectorStoreUpdater ,
368
369
| } ) : RelayObservable < GraphQLResponse > {
369
- const [ logObserver , logRequestInfo ] = this . __createLogObserver (
370
+ const logObserver = this . __createExecuteLogObserver (
370
371
operation . request . node . params ,
371
372
operation . request . variables ,
372
373
) ;
373
374
return RelayObservable . create ( sink => {
374
- const source = this . _network
375
- . execute (
376
- operation . request . node . params ,
377
- operation . request . variables ,
378
- operation . request . cacheConfig || { } ,
379
- null ,
380
- logRequestInfo ,
381
- )
382
- . do ( logObserver ) ;
375
+ const source = this . _network . execute (
376
+ operation . request . node . params ,
377
+ operation . request . variables ,
378
+ operation . request . cacheConfig || { } ,
379
+ null ,
380
+ ) ;
383
381
const executor = RelayModernQueryExecutor . execute ( {
384
382
operation,
385
383
operationExecutions : this . _operationExecutions ,
@@ -397,7 +395,7 @@ class RelayModernEnvironment implements IEnvironment {
397
395
treatMissingFieldsAsNull : this . _treatMissingFieldsAsNull ,
398
396
} ) ;
399
397
return ( ) => executor . cancel ( ) ;
400
- } ) ;
398
+ } ) . do ( logObserver ) ;
401
399
}
402
400
403
401
/**
@@ -423,7 +421,7 @@ class RelayModernEnvironment implements IEnvironment {
423
421
updater ?: ?SelectorStoreUpdater ,
424
422
uploadables ?: ?UploadableMap ,
425
423
| } ) : RelayObservable < GraphQLResponse > {
426
- const [ logObserver , logRequestInfo ] = this . __createLogObserver (
424
+ const logObserver = this . __createExecuteLogObserver (
427
425
operation . request . node . params ,
428
426
operation . request . variables ,
429
427
) ;
@@ -436,18 +434,15 @@ class RelayModernEnvironment implements IEnvironment {
436
434
updater : optimisticUpdater ,
437
435
} ;
438
436
}
439
- const source = this . _network
440
- . execute (
441
- operation . request . node . params ,
442
- operation . request . variables ,
443
- {
444
- ...operation . request . cacheConfig ,
445
- force : true ,
446
- } ,
447
- uploadables ,
448
- logRequestInfo ,
449
- )
450
- . do ( logObserver ) ;
437
+ const source = this . _network . execute (
438
+ operation . request . node . params ,
439
+ operation . request . variables ,
440
+ {
441
+ ...operation . request . cacheConfig ,
442
+ force : true ,
443
+ } ,
444
+ uploadables ,
445
+ ) ;
451
446
const executor = RelayModernQueryExecutor . execute ( {
452
447
operation,
453
448
operationExecutions : this . _operationExecutions ,
@@ -465,7 +460,7 @@ class RelayModernEnvironment implements IEnvironment {
465
460
treatMissingFieldsAsNull : this . _treatMissingFieldsAsNull ,
466
461
} ) ;
467
462
return ( ) => executor . cancel ( ) ;
468
- } ) ;
463
+ } ) . do ( logObserver ) ;
469
464
}
470
465
471
466
/**
@@ -484,6 +479,10 @@ class RelayModernEnvironment implements IEnvironment {
484
479
operation : OperationDescriptor ,
485
480
source : RelayObservable < GraphQLResponse > ,
486
481
| } ) : RelayObservable < GraphQLResponse > {
482
+ const logObserver = this . __createExecuteLogObserver (
483
+ operation . request . node . params ,
484
+ operation . request . variables ,
485
+ ) ;
487
486
return RelayObservable . create ( sink => {
488
487
const executor = RelayModernQueryExecutor . execute ( {
489
488
operation,
@@ -501,20 +500,20 @@ class RelayModernEnvironment implements IEnvironment {
501
500
treatMissingFieldsAsNull : this . _treatMissingFieldsAsNull ,
502
501
} ) ;
503
502
return ( ) => executor . cancel ( ) ;
504
- } ) ;
503
+ } ) . do ( logObserver ) ;
505
504
}
506
505
507
506
toJSON ( ) : mixed {
508
507
return `RelayModernEnvironment ( ${this . configName ?? ''} ) `;
509
508
}
510
509
511
- __createLogObserver (
510
+ __createExecuteLogObserver (
512
511
params : RequestParameters ,
513
512
variables : Variables ,
514
- ): [ Observer<GraphQLResponse>, LogRequestInfoFunction] {
513
+ ) : Observer < GraphQLResponse > {
515
514
const transactionID = generateID ( ) ;
516
515
const log = this . __log ;
517
- const logObserver = {
516
+ return {
518
517
start : subscription => {
519
518
log ( {
520
519
name : 'execute.start' ,
@@ -550,14 +549,72 @@ class RelayModernEnvironment implements IEnvironment {
550
549
} ) ;
551
550
} ,
552
551
} ;
553
- const logRequestInfo = info => {
554
- log({
555
- name: 'execute.info',
556
- transactionID,
557
- info,
558
- });
552
+ }
553
+
554
+ /**
555
+ * Wraps the network with logging to ensure that network requests are
556
+ * always logged. Relying on each network callsite to be wrapped is
557
+ * untenable and will eventually lead to holes in the logging.
558
+ */
559
+ __wrapNetworkWithLogObserver ( network : INetwork ) : INetwork {
560
+ const that = this ;
561
+ return {
562
+ execute (
563
+ params : RequestParameters ,
564
+ variables : Variables ,
565
+ cacheConfig : CacheConfig ,
566
+ uploadables ?: ?UploadableMap ,
567
+ ) : RelayObservable < GraphQLResponse > {
568
+ const transactionID = generateID ( ) ;
569
+ const log = that . __log ;
570
+ const logObserver = {
571
+ start : subscription => {
572
+ log ( {
573
+ name : 'network.start' ,
574
+ transactionID,
575
+ params,
576
+ variables,
577
+ } ) ;
578
+ } ,
579
+ next : response => {
580
+ log ( {
581
+ name : 'network.next' ,
582
+ transactionID,
583
+ response,
584
+ } ) ;
585
+ } ,
586
+ error : error => {
587
+ log ( {
588
+ name : 'network.error' ,
589
+ transactionID,
590
+ error,
591
+ } ) ;
592
+ } ,
593
+ complete : ( ) => {
594
+ log ( {
595
+ name : 'network.complete' ,
596
+ transactionID,
597
+ } ) ;
598
+ } ,
599
+ unsubscribe : ( ) => {
600
+ log ( {
601
+ name : 'network.unsubscribe' ,
602
+ transactionID,
603
+ } ) ;
604
+ } ,
605
+ } ;
606
+ const logRequestInfo = info => {
607
+ log ( {
608
+ name : 'network.info' ,
609
+ transactionID,
610
+ info,
611
+ } ) ;
612
+ } ;
613
+ return network
614
+ . execute ( params , variables , cacheConfig , uploadables , logRequestInfo )
615
+ . do ( logObserver ) ;
616
+ } ,
559
617
} ;
560
- return [logObserver, logRequestInfo];
561
618
}
562
619
}
563
620
0 commit comments