44 OptionalKind ,
55 ParameterDeclarationStructure ,
66} from 'ts-morph' ;
7- import { GeneratorConfig , PathInfo , SwaggerDefinition } from '../../../core/types.js' ;
7+ import { GeneratorConfig , Parameter , PathInfo , SwaggerDefinition } from '../../../core/types.js' ;
88import { camelCase , getTypeScriptType , isDataTypeInterface } from '../../../core/utils.js' ;
99import { HttpContext , HttpHeaders , HttpParams } from '@angular/common/http' ;
1010import { SwaggerParser } from "@src/core/parser.js" ;
@@ -88,7 +88,16 @@ export class ServiceMethodGenerator {
8888
8989 ( operation . parameters ?? [ ] ) . forEach ( param => {
9090 const paramName = camelCase ( param . name ) ;
91- const paramType = getTypeScriptType ( param . schema , this . config , knownTypes ) ;
91+ // Robust schema retrieval: check `content` for schema if basic schema is missing/default
92+ let effectiveSchema = param . schema ;
93+ if ( param . content ) {
94+ const firstType = Object . keys ( param . content ) [ 0 ] ;
95+ if ( firstType && param . content [ firstType ] . schema ) {
96+ effectiveSchema = param . content [ firstType ] . schema as SwaggerDefinition ;
97+ }
98+ }
99+
100+ const paramType = getTypeScriptType ( effectiveSchema , this . config , knownTypes ) ;
92101
93102 parameters . push ( {
94103 name : paramName ,
@@ -112,13 +121,21 @@ export class ServiceMethodGenerator {
112121 return parameters . sort ( ( a , b ) => ( a . hasQuestionToken ? 1 : 0 ) - ( b . hasQuestionToken ? 1 : 0 ) ) ;
113122 }
114123
124+ private isJsonContent ( p : Parameter ) : boolean {
125+ if ( ! p . content ) return false ;
126+ const keys = Object . keys ( p . content ) ;
127+ return keys . some ( k => k . includes ( 'application/json' ) || k . includes ( '*/*' ) ) ;
128+ }
129+
115130 private buildMethodBody ( operation : PathInfo , parameters : OptionalKind < ParameterDeclarationStructure > [ ] ) : string {
116131 let urlTemplate = operation . path ;
117132 operation . parameters ?. filter ( p => p . in === 'path' ) . forEach ( p => {
118133 const jsParam = camelCase ( p . name ) ;
119134 const style = p . style || 'simple' ;
120135 const explode = p . explode ?? false ;
121- urlTemplate = urlTemplate . replace ( `{${ p . name } }` , `\${HttpParamsBuilder.serializePathParam('${ p . name } ', ${ jsParam } , '${ style } ', ${ explode } )}` ) ;
136+ const allowReserved = p . allowReserved ?? false ;
137+ const serializationArg = this . isJsonContent ( p ) ? ", 'json'" : "" ;
138+ urlTemplate = urlTemplate . replace ( `{${ p . name } }` , `\${HttpParamsBuilder.serializePathParam('${ p . name } ', ${ jsParam } , '${ style } ', ${ explode } , ${ allowReserved } ${ serializationArg } )}` ) ;
122139 } ) ;
123140
124141 const lines : string [ ] = [ ] ;
@@ -153,7 +170,8 @@ console.warn('The following querystring parameters are not automatically handled
153170 headerParams . forEach ( p => {
154171 const paramName = camelCase ( p . name ) ;
155172 const explode = p . explode ?? false ;
156- lines . push ( `if (${ paramName } != null) { headers = headers.set('${ p . name } ', HttpParamsBuilder.serializeHeaderParam('${ p . name } ', ${ paramName } , ${ explode } )); }` ) ;
173+ const serializationArg = this . isJsonContent ( p ) ? ", 'json'" : "" ;
174+ lines . push ( `if (${ paramName } != null) { headers = headers.set('${ p . name } ', HttpParamsBuilder.serializeHeaderParam('${ p . name } ', ${ paramName } , ${ explode } ${ serializationArg } )); }` ) ;
157175 } ) ;
158176
159177 if ( cookieParams . length > 0 ) {
@@ -162,7 +180,8 @@ console.warn('The following querystring parameters are not automatically handled
162180 const paramName = camelCase ( p . name ) ;
163181 const style = p . style || 'form' ;
164182 const explode = p . explode ?? true ;
165- lines . push ( `if (${ paramName } != null) { __cookies.push(HttpParamsBuilder.serializeCookieParam('${ p . name } ', ${ paramName } , '${ style } ', ${ explode } )); }` ) ;
183+ const serializationArg = this . isJsonContent ( p ) ? ", 'json'" : "" ;
184+ lines . push ( `if (${ paramName } != null) { __cookies.push(HttpParamsBuilder.serializeCookieParam('${ p . name } ', ${ paramName } , '${ style } ', ${ explode } ${ serializationArg } )); }` ) ;
166185 } ) ;
167186 lines . push ( `if (__cookies.length > 0) { headers = headers.set('Cookie', __cookies.join('; ')); }` ) ;
168187 }
0 commit comments