1
- import { ParameterObject , ReferenceObject } from "../types" ;
2
- import { comment , tsReadonly } from "../utils" ;
1
+ import { ParameterObject , ReferenceObject , SourceDocument } from "../types" ;
2
+ import { comment , resolveRefIfNeeded , tsReadonly } from "../utils" ;
3
3
import { transformSchemaObj } from "./schema" ;
4
4
5
5
export function transformParametersArray (
6
6
parameters : ( ReferenceObject | ParameterObject ) [ ] ,
7
7
{
8
8
globalParameters,
9
9
immutableTypes,
10
+ document,
10
11
version,
11
12
} : {
12
13
globalParameters ?: Record < string , ParameterObject > ;
13
14
immutableTypes : boolean ;
15
+ document : SourceDocument ;
14
16
version : number ;
15
17
}
16
18
) : string {
@@ -34,6 +36,8 @@ export function transformParametersArray(
34
36
} else if ( version === 3 ) {
35
37
mappedParams [ reference . in ] [ reference . name || paramName ] = {
36
38
...reference ,
39
+ // They want to keep this ref here so it references
40
+ // the components, but it does violate the standards.
37
41
schema : { $ref : paramObj . $ref } ,
38
42
} ;
39
43
}
@@ -55,20 +59,36 @@ export function transformParametersArray(
55
59
if ( paramObj . description ) paramComment += paramObj . description ;
56
60
if ( paramComment ) output += comment ( paramComment ) ;
57
61
58
- const required = paramObj . required ? `` : `?` ;
62
+ let hasDefault = false ;
63
+ if ( paramObj . schema ) {
64
+ const actualParam = resolveRefIfNeeded < ParameterObject > ( document , paramObj . schema as ReferenceObject ) ;
65
+
66
+ // Because the schema refs have been re-written to reference the global parameters
67
+ // need to look a little deeper to get the real schema.
68
+ if ( actualParam != null && actualParam . schema != null ) {
69
+ const actualParamSchema = resolveRefIfNeeded ( document , actualParam ?. schema ) ;
70
+
71
+ if ( actualParamSchema != null && actualParamSchema . default != null ) {
72
+ hasDefault = true ;
73
+ }
74
+ }
75
+ }
76
+
77
+ const required = ( paramObj . required || hasDefault ) ? `` : `?` ;
59
78
let paramType = `` ;
60
79
if ( version === 2 ) {
61
80
if ( paramObj . in === "body" && paramObj . schema ) {
62
- paramType = transformSchemaObj ( paramObj . schema , { immutableTypes, version } ) ;
81
+ paramType = transformSchemaObj ( paramObj . schema , { immutableTypes, version, document } ) ;
63
82
} else if ( paramObj . type ) {
64
- paramType = transformSchemaObj ( paramObj , { immutableTypes, version } ) ;
83
+ paramType = transformSchemaObj ( paramObj , { immutableTypes, version, document } ) ;
65
84
} else {
66
85
paramType = "unknown" ;
67
86
}
68
87
} else if ( version === 3 ) {
69
- paramType = paramObj . schema ? transformSchemaObj ( paramObj . schema , { immutableTypes, version } ) : "unknown" ;
88
+ paramType = paramObj . schema ? transformSchemaObj ( paramObj . schema , { immutableTypes, version, document } ) : "unknown" ;
70
89
}
71
90
output += ` ${ readonly } "${ paramName } "${ required } : ${ paramType } ;\n` ;
91
+
72
92
} ) ;
73
93
output += ` }\n` ; // close in
74
94
} ) ;
0 commit comments