@@ -20,10 +20,10 @@ use relay_transforms::{
2020 extract_connection_metadata_from_directive, extract_handle_field_directives,
2121 extract_refetch_metadata_from_directive, extract_values_from_handle_field_directive,
2222 extract_variable_name, generate_abstract_type_refinement_key, remove_directive,
23- ConnectionConstants , ConnectionMetadata , DeferDirective , RelayDirective , StreamDirective ,
24- ACTION_ARGUMENT , CLIENT_EXTENSION_DIRECTIVE_NAME , DEFER_STREAM_CONSTANTS ,
25- DIRECTIVE_SPLIT_OPERATION , INLINE_DATA_CONSTANTS , INTERNAL_METADATA_DIRECTIVE , MATCH_CONSTANTS ,
26- PATH_METADATA_ARGUMENT , REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY , REQUIRED_METADATA_KEY ,
23+ ConnectionConstants , ConnectionMetadata , DeferDirective , DeferStreamInterface , RelayDirective ,
24+ StreamDirective , ACTION_ARGUMENT , CLIENT_EXTENSION_DIRECTIVE_NAME , DIRECTIVE_SPLIT_OPERATION ,
25+ INLINE_DATA_CONSTANTS , INTERNAL_METADATA_DIRECTIVE , MATCH_CONSTANTS , PATH_METADATA_ARGUMENT ,
26+ REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY , REQUIRED_METADATA_KEY ,
2727 TYPE_DISCRIMINATOR_DIRECTIVE_NAME ,
2828} ;
2929use schema:: Schema ;
@@ -33,9 +33,14 @@ pub fn build_request_params_ast_key(
3333 request_parameters : RequestParameters ,
3434 ast_builder : & mut AstBuilder ,
3535 operation : & OperationDefinition ,
36+ defer_stream_interface : & DeferStreamInterface ,
3637) -> AstKey {
37- let mut operation_builder =
38- CodegenBuilder :: new ( schema, CodegenVariant :: Normalization , ast_builder) ;
38+ let mut operation_builder = CodegenBuilder :: new (
39+ schema,
40+ CodegenVariant :: Normalization ,
41+ ast_builder,
42+ defer_stream_interface,
43+ ) ;
3944 operation_builder. build_request_parameters ( operation, request_parameters)
4045}
4146
@@ -45,11 +50,21 @@ pub fn build_request(
4550 operation : & OperationDefinition ,
4651 fragment : & FragmentDefinition ,
4752 request_parameters : AstKey ,
53+ defer_stream_interface : & DeferStreamInterface ,
4854) -> AstKey {
49- let mut operation_builder =
50- CodegenBuilder :: new ( schema, CodegenVariant :: Normalization , ast_builder) ;
55+ let mut operation_builder = CodegenBuilder :: new (
56+ schema,
57+ CodegenVariant :: Normalization ,
58+ ast_builder,
59+ defer_stream_interface,
60+ ) ;
5161 let operation = Primitive :: Key ( operation_builder. build_operation ( operation) ) ;
52- let mut fragment_builder = CodegenBuilder :: new ( schema, CodegenVariant :: Reader , ast_builder) ;
62+ let mut fragment_builder = CodegenBuilder :: new (
63+ schema,
64+ CodegenVariant :: Reader ,
65+ ast_builder,
66+ defer_stream_interface,
67+ ) ;
5368 let fragment = Primitive :: Key ( fragment_builder. build_fragment ( fragment, true ) ) ;
5469
5570 ast_builder. intern ( Ast :: Object ( vec ! [
@@ -86,22 +101,35 @@ pub fn build_operation(
86101 schema : & Schema ,
87102 ast_builder : & mut AstBuilder ,
88103 operation : & OperationDefinition ,
104+ defer_stream_interface : & DeferStreamInterface ,
89105) -> AstKey {
90- let mut builder = CodegenBuilder :: new ( schema, CodegenVariant :: Normalization , ast_builder) ;
106+ let mut builder = CodegenBuilder :: new (
107+ schema,
108+ CodegenVariant :: Normalization ,
109+ ast_builder,
110+ defer_stream_interface,
111+ ) ;
91112 builder. build_operation ( operation)
92113}
93114
94115pub fn build_fragment (
95116 schema : & Schema ,
96117 ast_builder : & mut AstBuilder ,
97118 fragment : & FragmentDefinition ,
119+ defer_stream_interface : & DeferStreamInterface ,
98120) -> AstKey {
99- let mut builder = CodegenBuilder :: new ( schema, CodegenVariant :: Reader , ast_builder) ;
121+ let mut builder = CodegenBuilder :: new (
122+ schema,
123+ CodegenVariant :: Reader ,
124+ ast_builder,
125+ defer_stream_interface,
126+ ) ;
100127 builder. build_fragment ( fragment, false )
101128}
102129
103- struct CodegenBuilder < ' schema , ' builder > {
130+ struct CodegenBuilder < ' schema , ' builder , ' dsi > {
104131 connection_constants : ConnectionConstants ,
132+ defer_stream_interface : & ' dsi DeferStreamInterface ,
105133 schema : & ' schema Schema ,
106134 variant : CodegenVariant ,
107135 ast_builder : & ' builder mut AstBuilder ,
@@ -113,14 +141,16 @@ enum CodegenVariant {
113141 Normalization ,
114142}
115143
116- impl < ' schema , ' builder > CodegenBuilder < ' schema , ' builder > {
144+ impl < ' schema , ' builder , ' dsi > CodegenBuilder < ' schema , ' builder , ' dsi > {
117145 fn new (
118146 schema : & ' schema Schema ,
119147 variant : CodegenVariant ,
120148 ast_builder : & ' builder mut AstBuilder ,
149+ defer_stream_interface : & ' dsi DeferStreamInterface ,
121150 ) -> Self {
122151 Self {
123152 connection_constants : Default :: default ( ) ,
153+ defer_stream_interface,
124154 schema,
125155 variant,
126156 ast_builder,
@@ -413,7 +443,7 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
413443 ] ;
414444 if metadata. is_stream_connection {
415445 object. push ( ObjectEntry {
416- key : DEFER_STREAM_CONSTANTS . stream_name ,
446+ key : self . defer_stream_interface . stream_name ,
417447 value : Primitive :: Bool ( true ) ,
418448 } )
419449 }
@@ -460,7 +490,7 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
460490 Selection :: InlineFragment ( inline_frag) => {
461491 let defer = inline_frag
462492 . directives
463- . named ( DEFER_STREAM_CONSTANTS . defer_name ) ;
493+ . named ( self . defer_stream_interface . defer_name ) ;
464494 if let Some ( defer) = defer {
465495 vec ! [ self . build_defer( & inline_frag, defer) ]
466496 } else if let Some ( inline_data_directive) = inline_frag
@@ -469,12 +499,8 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
469499 {
470500 // If inline fragment has @__inline directive (created by inline_data_fragment transform)
471501 // we will return selection wrapped with InlineDataFragmentSpread
472- vec ! [
473- self . build_inline_data_fragment_spread(
474- & inline_frag,
475- & inline_data_directive,
476- ) ,
477- ]
502+ vec ! [ self
503+ . build_inline_data_fragment_spread( & inline_frag, & inline_data_directive) ]
478504 } else if let Some ( match_directive) = inline_frag
479505 . directives
480506 . named ( MATCH_CONSTANTS . custom_module_directive_name )
@@ -485,7 +511,9 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
485511 }
486512 }
487513 Selection :: LinkedField ( field) => {
488- let stream = field. directives . named ( DEFER_STREAM_CONSTANTS . stream_name ) ;
514+ let stream = field
515+ . directives
516+ . named ( self . defer_stream_interface . stream_name ) ;
489517
490518 match stream {
491519 Some ( stream) => vec ! [ self . build_stream( & field, stream) ] ,
@@ -890,7 +918,8 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
890918 defer : & Directive ,
891919 ) -> Primitive {
892920 let next_selections = self . build_selections ( inline_fragment. selections . iter ( ) ) ;
893- let DeferDirective { if_arg, label_arg } = DeferDirective :: from ( defer) ;
921+ let DeferDirective { if_arg, label_arg } =
922+ DeferDirective :: from ( defer, self . defer_stream_interface ) ;
894923 let if_variable_name = extract_variable_name ( if_arg) ;
895924 let label_name = label_arg. unwrap ( ) . value . item . expect_string_literal ( ) ;
896925
@@ -918,7 +947,7 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
918947 let next_selections = vec ! [ self . build_linked_field( & LinkedField {
919948 directives: remove_directive(
920949 & linked_field. directives,
921- DEFER_STREAM_CONSTANTS . stream_name,
950+ self . defer_stream_interface . stream_name,
922951 ) ,
923952 ..linked_field. to_owned( )
924953 } ) ] ;
@@ -940,7 +969,7 @@ impl<'schema, 'builder> CodegenBuilder<'schema, 'builder> {
940969 label_arg,
941970 use_customized_batch_arg,
942971 initial_count_arg : _,
943- } = StreamDirective :: from ( stream) ;
972+ } = StreamDirective :: from ( stream, self . defer_stream_interface ) ;
944973 let if_variable_name = extract_variable_name ( if_arg) ;
945974 let use_customized_batch_variable_name =
946975 extract_variable_name ( use_customized_batch_arg) ;
0 commit comments