52
52
import cz .habarta .typescript .generator .parser .PropertyModel ;
53
53
import cz .habarta .typescript .generator .parser .RestApplicationModel ;
54
54
import cz .habarta .typescript .generator .parser .RestMethodModel ;
55
- import cz .habarta .typescript .generator .parser .RestQueryParam ;
55
+ import cz .habarta .typescript .generator .parser .RestParam ;
56
56
import cz .habarta .typescript .generator .type .JTypeWithNullability ;
57
57
import cz .habarta .typescript .generator .util .GenericsResolver ;
58
58
import cz .habarta .typescript .generator .util .Pair ;
@@ -622,6 +622,7 @@ private void createRestClients(TsModel tsModel, SymbolTable symbolTable, List<Re
622
622
new TsProperty ("queryParams" , new TsType .OptionalType (TsType .Any )),
623
623
new TsProperty ("data" , new TsType .OptionalType (TsType .Any )),
624
624
new TsProperty ("copyFn" , new TsType .OptionalType (new TsType .FunctionType (Arrays .asList (new TsParameter ("data" , returnGenericVariable )), returnGenericVariable ))),
625
+ new TsProperty ("headers" , new TsType .OptionalType (TsType .Any )),
625
626
optionsType != null ? new TsProperty ("options" , new TsType .OptionalType (optionsType )) : null
626
627
))
627
628
), new TsType .GenericReferenceType (responseSymbol , returnGenericVariable ), null , null )
@@ -728,57 +729,14 @@ private TsMethodModel processRestMethod(TsModel tsModel, SymbolTable symbolTable
728
729
parameters .add (processParameter (symbolTable , method , method .getEntityParam ()));
729
730
}
730
731
// query params
731
- final List <RestQueryParam > queryParams = method .getQueryParams ();
732
- final TsParameterModel queryParameter ;
733
- if (queryParams != null && !queryParams .isEmpty ()) {
734
- final List <TsType > types = new ArrayList <>();
735
- if (queryParams .stream ().anyMatch (param -> param instanceof RestQueryParam .Map )) {
736
- types .add (new TsType .IndexedArrayType (TsType .String , TsType .Any ));
737
- } else {
738
- final List <TsProperty > currentSingles = new ArrayList <>();
739
- final Runnable flushSingles = () -> {
740
- if (!currentSingles .isEmpty ()) {
741
- types .add (new TsType .ObjectType (currentSingles ));
742
- currentSingles .clear ();
743
- }
744
- };
745
- for (RestQueryParam restQueryParam : queryParams ) {
746
- if (restQueryParam instanceof RestQueryParam .Single ) {
747
- final MethodParameterModel queryParam = ((RestQueryParam .Single ) restQueryParam ).getQueryParam ();
748
- final TsType type = typeFromJava (symbolTable , queryParam .getType (), method .getName (), method .getOriginClass ());
749
- currentSingles .add (new TsProperty (queryParam .getName (), restQueryParam .required ? type : new TsType .OptionalType (type )));
750
- }
751
- if (restQueryParam instanceof RestQueryParam .Bean ) {
752
- final BeanModel queryBean = ((RestQueryParam .Bean ) restQueryParam ).getBean ();
753
- flushSingles .run ();
754
- final Symbol queryParamsSymbol = symbolTable .getSymbol (queryBean .getOrigin (), "QueryParams" );
755
- if (tsModel .getBean (queryParamsSymbol ) == null ) {
756
- tsModel .getBeans ().add (new TsBeanModel (
757
- queryBean .getOrigin (),
758
- TsBeanCategory .Data ,
759
- /*isClass*/ false ,
760
- queryParamsSymbol ,
761
- /*typeParameters*/ null ,
762
- /*parent*/ null ,
763
- /*extendsList*/ null ,
764
- /*implementsList*/ null ,
765
- processProperties (symbolTable , null , queryBean ),
766
- /*constructor*/ null ,
767
- /*methods*/ null ,
768
- /*comments*/ null
769
- ));
770
- }
771
- types .add (new TsType .ReferenceType (queryParamsSymbol ));
772
- }
773
- }
774
- flushSingles .run ();
775
- }
776
- boolean allQueryParamsOptional = queryParams .stream ().noneMatch (queryParam -> queryParam .required );
777
- TsType .IntersectionType queryParamType = new TsType .IntersectionType (types );
778
- queryParameter = new TsParameterModel ("queryParams" , allQueryParamsOptional ? new TsType .OptionalType (queryParamType ) : queryParamType );
732
+ final TsParameterModel queryParameter = convertRestParams (method .getQueryParams (), symbolTable , method , tsModel , "queryParams" , "QueryParams" );
733
+ if (queryParameter != null ){
779
734
parameters .add (queryParameter );
780
- } else {
781
- queryParameter = null ;
735
+ }
736
+ // body params
737
+ final TsParameterModel headersParameter = convertRestParams (method .getHeaders (), symbolTable , method , tsModel , "headers" , "Headers" );
738
+ if (headersParameter != null ){
739
+ parameters .add (headersParameter );
782
740
}
783
741
if (optionsType != null ) {
784
742
final TsParameterModel optionsParameter = new TsParameterModel ("options" , new TsType .OptionalType (optionsType ));
@@ -808,6 +766,7 @@ private TsMethodModel processRestMethod(TsModel tsModel, SymbolTable symbolTable
808
766
new TsPropertyDefinition ("url" , processPathTemplate (pathTemplate )),
809
767
queryParameter != null ? new TsPropertyDefinition ("queryParams" , new TsIdentifierReference ("queryParams" )) : null ,
810
768
method .getEntityParam () != null ? new TsPropertyDefinition ("data" , new TsIdentifierReference (method .getEntityParam ().getName ())) : null ,
769
+ headersParameter != null ? new TsPropertyDefinition ("headers" , new TsIdentifierReference ("headers" )) : null ,
811
770
optionsType != null ? new TsPropertyDefinition ("options" , new TsIdentifierReference ("options" )) : null
812
771
)
813
772
)
@@ -820,6 +779,57 @@ private TsMethodModel processRestMethod(TsModel tsModel, SymbolTable symbolTable
820
779
return tsMethodModel ;
821
780
}
822
781
782
+ private TsParameterModel convertRestParams (List <RestParam > restParams , SymbolTable symbolTable , RestMethodModel method , TsModel tsModel , String parameterName , String beanSuffix ){
783
+ if (restParams == null || restParams .isEmpty ()){
784
+ return null ;
785
+ }
786
+ final List <TsType > types = new ArrayList <>();
787
+ if (restParams .stream ().anyMatch (param -> param instanceof RestParam .Map )) {
788
+ types .add (new TsType .IndexedArrayType (TsType .String , TsType .Any ));
789
+ } else {
790
+ final List <TsProperty > currentSingles = new ArrayList <>();
791
+ final Runnable flushSingles = () -> {
792
+ if (!currentSingles .isEmpty ()) {
793
+ types .add (new TsType .ObjectType (currentSingles ));
794
+ currentSingles .clear ();
795
+ }
796
+ };
797
+ for (RestParam restParam : restParams ) {
798
+ if (restParam instanceof RestParam .Single ) {
799
+ final MethodParameterModel restParamMethodParameterModel = ((RestParam .Single ) restParam ).getRestParam ();
800
+ final TsType type = typeFromJava (symbolTable , restParamMethodParameterModel .getType (), method .getName (), method .getOriginClass ());
801
+ currentSingles .add (new TsProperty (restParamMethodParameterModel .getName (), restParam .required ? type : new TsType .OptionalType (type )));
802
+ }
803
+ if (restParam instanceof RestParam .Bean ) {
804
+ final BeanModel paramBean = ((RestParam .Bean ) restParam ).getBean ();
805
+ flushSingles .run ();
806
+ final Symbol paramsSymbol = symbolTable .getSymbol (paramBean .getOrigin (), beanSuffix );
807
+ if (tsModel .getBean (paramsSymbol ) == null ) {
808
+ tsModel .getBeans ().add (new TsBeanModel (
809
+ paramBean .getOrigin (),
810
+ TsBeanCategory .Data ,
811
+ /*isClass*/ false ,
812
+ paramsSymbol ,
813
+ /*typeParameters*/ null ,
814
+ /*parent*/ null ,
815
+ /*extendsList*/ null ,
816
+ /*implementsList*/ null ,
817
+ processProperties (symbolTable , null , paramBean ),
818
+ /*constructor*/ null ,
819
+ /*methods*/ null ,
820
+ /*comments*/ null
821
+ ));
822
+ }
823
+ types .add (new TsType .ReferenceType (paramsSymbol ));
824
+ }
825
+ }
826
+ flushSingles .run ();
827
+ }
828
+ boolean allParamsOptional = restParams .stream ().noneMatch (param -> param .required );
829
+ TsType .IntersectionType paramType = new TsType .IntersectionType (types );
830
+ return new TsParameterModel (parameterName , allParamsOptional ? new TsType .OptionalType (paramType ) : paramType );
831
+ }
832
+
823
833
private TsParameterModel processParameter (SymbolTable symbolTable , MethodModel method , MethodParameterModel parameter ) {
824
834
final String parameterName = parameter .getName ();
825
835
final TsType parameterType = typeFromJava (symbolTable , parameter .getType (), method .getName (), method .getOriginClass ());
0 commit comments