@@ -572,9 +572,8 @@ export function createEnvelopOrchestrator<PluginsContext extends DefaultContext>
572
572
return async ( params , contextExtension ) => {
573
573
const context = await contextFactory ( contextExtension ) ;
574
574
575
- let result : AsyncIterableIteratorOrValue < ExecutionResult > | null = null ;
576
-
577
- const doneFns : OnPerformDoneHook [ ] = [ ] ;
575
+ let earlyResult : AsyncIterableIteratorOrValue < ExecutionResult > | null = null ;
576
+ const onDones : OnPerformDoneHook [ ] = [ ] ;
578
577
for ( const onPerform of beforeCallbacks . perform ) {
579
578
const after = await onPerform ( {
580
579
context,
@@ -585,59 +584,59 @@ export function createEnvelopOrchestrator<PluginsContext extends DefaultContext>
585
584
setParams : newParams => {
586
585
params = newParams ;
587
586
} ,
588
- setResult : earlyResult => {
589
- result = earlyResult ;
587
+ setResult : result => {
588
+ earlyResult = result ;
590
589
} ,
591
590
} ) ;
591
+ after ?. onPerformDone && onDones . push ( after . onPerformDone ) ;
592
+ }
593
+ const done = ( result : AsyncIterableIteratorOrValue < ExecutionResult > ) => {
594
+ for ( const onDone of onDones ) {
595
+ onDone ( {
596
+ result,
597
+ setResult : newResult => {
598
+ result = newResult ;
599
+ } ,
600
+ } ) ;
601
+ }
602
+ return result ;
603
+ } ;
592
604
593
- after ?. onPerformDone && doneFns . push ( after . onPerformDone ) ;
605
+ if ( earlyResult ) {
606
+ return done ( earlyResult ) ;
594
607
}
595
608
596
- if ( ! result ) {
597
- let document ;
598
- try {
599
- document = parse ( params . query ) ;
600
- } catch ( err ) {
601
- return { errors : [ err ] } ;
602
- }
609
+ let document ;
610
+ try {
611
+ document = parse ( params . query ) ;
612
+ } catch ( err ) {
613
+ return done ( { errors : [ err ] } ) ;
614
+ }
603
615
604
- const validationErrors = validate ( schema , document ) ;
605
- if ( validationErrors . length ) {
606
- return { errors : validationErrors } ;
607
- }
616
+ const validationErrors = validate ( schema , document ) ;
617
+ if ( validationErrors . length ) {
618
+ return done ( { errors : validationErrors } ) ;
619
+ }
608
620
609
- if ( isSubscriptionOperation ( document , params . operationName ) ) {
610
- result = await customSubscribe ( {
621
+ if ( isSubscriptionOperation ( document , params . operationName ) ) {
622
+ return done (
623
+ await customSubscribe ( {
611
624
document,
612
625
schema,
613
626
variableValues : params . variables ,
614
627
contextValue : context ,
615
- } ) ;
616
- } else {
617
- result = await customExecute ( {
618
- document,
619
- schema,
620
- variableValues : params . variables ,
621
- contextValue : context ,
622
- } ) ;
623
- }
628
+ } )
629
+ ) ;
624
630
}
625
631
626
- if ( ! result ) {
627
- // should never happen
628
- throw new Error ( 'Result not available' ) ;
629
- }
630
-
631
- for ( const doneFn of doneFns ) {
632
- doneFn ( {
633
- result,
634
- setResult : newResult => {
635
- result = newResult ;
636
- } ,
637
- } ) ;
638
- }
639
-
640
- return result ;
632
+ return done (
633
+ await customExecute ( {
634
+ document,
635
+ schema,
636
+ variableValues : params . variables ,
637
+ contextValue : context ,
638
+ } )
639
+ ) ;
641
640
} ;
642
641
} ;
643
642
0 commit comments