@@ -14,7 +14,7 @@ const extractPickedParameter = (parameter: OpenApi.Parameter): PickedParameter =
14
14
} ;
15
15
} ;
16
16
17
- const extractSuccessStatusCode = ( responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
17
+ const extractResponseNamesByStatusCode = ( type : "success" | "error" , responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
18
18
const statusCodeList : string [ ] = [ ] ;
19
19
Object . entries ( responses || { } ) . forEach ( ( [ statusCodeLike , response ] ) => {
20
20
// ContentTypeの定義が存在しない場合はstatusCodeを読み取らない
@@ -23,8 +23,14 @@ const extractSuccessStatusCode = (responses: { [statusCode: string]: OpenApi.Res
23
23
}
24
24
if ( typeof statusCodeLike === "string" ) {
25
25
const statusCodeNumberValue = parseInt ( statusCodeLike , 10 ) ;
26
- if ( 200 <= statusCodeNumberValue && statusCodeNumberValue < 300 ) {
27
- statusCodeList . push ( statusCodeNumberValue . toString ( ) ) ;
26
+ if ( type === "success" ) {
27
+ if ( 200 <= statusCodeNumberValue && statusCodeNumberValue < 300 ) {
28
+ statusCodeList . push ( statusCodeNumberValue . toString ( ) ) ;
29
+ }
30
+ } else if ( type === "error" ) {
31
+ if ( 400 <= statusCodeNumberValue && statusCodeNumberValue < 600 ) {
32
+ statusCodeList . push ( statusCodeNumberValue . toString ( ) ) ;
33
+ }
28
34
}
29
35
}
30
36
} ) ;
@@ -37,7 +43,7 @@ const getRequestContentTypeList = (requestBody: OpenApi.RequestBody): string[] =
37
43
38
44
const getSuccessResponseContentTypeList = ( responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
39
45
let contentTypeList : string [ ] = [ ] ;
40
- extractSuccessStatusCode ( responses ) . forEach ( statusCode => {
46
+ extractResponseNamesByStatusCode ( "success" , responses ) . forEach ( statusCode => {
41
47
const response = responses [ statusCode ] ;
42
48
contentTypeList = contentTypeList . concat ( Object . keys ( response . content || { } ) ) ;
43
49
} ) ;
@@ -51,11 +57,21 @@ const hasQueryParameters = (parameters?: OpenApi.Parameter[]): boolean => {
51
57
return parameters . filter ( parameter => parameter . in === "query" ) . length > 0 ;
52
58
} ;
53
59
54
- const generateCodeGeneratorParamsList = ( store : Store . Type , converterContext : ConverterContext . Types ) : CodeGeneratorParams [ ] => {
60
+ const generateCodeGeneratorParamsList = (
61
+ store : Store . Type ,
62
+ converterContext : ConverterContext . Types ,
63
+ allowOperationIds : string [ ] | undefined ,
64
+ ) : CodeGeneratorParams [ ] => {
55
65
const operationState = store . getNoReferenceOperationState ( ) ;
56
66
const params : CodeGeneratorParams [ ] = [ ] ;
57
67
Object . entries ( operationState ) . forEach ( ( [ operationId , item ] ) => {
58
- const responseSuccessNames = extractSuccessStatusCode ( item . responses ) . map ( statusCode =>
68
+ if ( allowOperationIds && ! allowOperationIds . includes ( operationId ) ) {
69
+ return ;
70
+ }
71
+ const responseSuccessNames = extractResponseNamesByStatusCode ( "success" , item . responses ) . map ( statusCode =>
72
+ converterContext . generateResponseName ( operationId , statusCode ) ,
73
+ ) ;
74
+ const responseErrorNames = extractResponseNamesByStatusCode ( "error" , item . responses ) . map ( statusCode =>
59
75
converterContext . generateResponseName ( operationId , statusCode ) ,
60
76
) ;
61
77
const requestContentTypeList = item . requestBody ? getRequestContentTypeList ( item . requestBody ) : [ ] ;
@@ -65,6 +81,7 @@ const generateCodeGeneratorParamsList = (store: Store.Type, converterContext: Co
65
81
66
82
const formatParams : CodeGeneratorParams = {
67
83
operationId : operationId ,
84
+ escapedOperationId : converterContext . escapeOperationIdText ( operationId ) ,
68
85
rawRequestUri : item . requestUri ,
69
86
httpMethod : item . httpMethod ,
70
87
argumentParamsTypeDeclaration : converterContext . generateArgumentParamsTypeDeclaration ( operationId ) ,
@@ -88,6 +105,7 @@ const generateCodeGeneratorParamsList = (store: Store.Type, converterContext: Co
88
105
responseSuccessNames : responseSuccessNames ,
89
106
responseFirstSuccessName : responseSuccessNames . length === 1 ? responseSuccessNames [ 0 ] : undefined ,
90
107
has2OrMoreSuccessNames : hasOver2SuccessNames ,
108
+ responseErrorNames : responseErrorNames ,
91
109
// Response Success Content Type
92
110
successResponseContentTypes : responseSuccessContentTypes ,
93
111
successResponseFirstContentType : responseSuccessContentTypes . length === 1 ? responseSuccessContentTypes [ 0 ] : undefined ,
@@ -113,7 +131,8 @@ export const generateApiClientCode = (
113
131
context : ts . TransformationContext ,
114
132
converterContext : ConverterContext . Types ,
115
133
rewriteCodeAfterTypeDeclaration : RewriteCodeAfterTypeDeclaration ,
134
+ allowOperationIds : string [ ] | undefined ,
116
135
) : void => {
117
- const codeGeneratorParamsList = generateCodeGeneratorParamsList ( store , converterContext ) ;
136
+ const codeGeneratorParamsList = generateCodeGeneratorParamsList ( store , converterContext , allowOperationIds ) ;
118
137
store . addAdditionalStatement ( rewriteCodeAfterTypeDeclaration ( context , codeGeneratorParamsList ) ) ;
119
138
} ;
0 commit comments