@@ -14,7 +14,7 @@ const extractPickedParameter = (parameter: OpenApi.Parameter): PickedParameter =
1414 } ;
1515} ;
1616
17- const extractSuccessStatusCode = ( responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
17+ const extractResponseNamesByStatusCode = ( type : "success" | "error" , responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
1818 const statusCodeList : string [ ] = [ ] ;
1919 Object . entries ( responses || { } ) . forEach ( ( [ statusCodeLike , response ] ) => {
2020 // ContentTypeの定義が存在しない場合はstatusCodeを読み取らない
@@ -23,8 +23,14 @@ const extractSuccessStatusCode = (responses: { [statusCode: string]: OpenApi.Res
2323 }
2424 if ( typeof statusCodeLike === "string" ) {
2525 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+ }
2834 }
2935 }
3036 } ) ;
@@ -37,7 +43,7 @@ const getRequestContentTypeList = (requestBody: OpenApi.RequestBody): string[] =
3743
3844const getSuccessResponseContentTypeList = ( responses : { [ statusCode : string ] : OpenApi . Response } ) : string [ ] => {
3945 let contentTypeList : string [ ] = [ ] ;
40- extractSuccessStatusCode ( responses ) . forEach ( statusCode => {
46+ extractResponseNamesByStatusCode ( "success" , responses ) . forEach ( statusCode => {
4147 const response = responses [ statusCode ] ;
4248 contentTypeList = contentTypeList . concat ( Object . keys ( response . content || { } ) ) ;
4349 } ) ;
@@ -51,11 +57,21 @@ const hasQueryParameters = (parameters?: OpenApi.Parameter[]): boolean => {
5157 return parameters . filter ( parameter => parameter . in === "query" ) . length > 0 ;
5258} ;
5359
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 [ ] => {
5565 const operationState = store . getNoReferenceOperationState ( ) ;
5666 const params : CodeGeneratorParams [ ] = [ ] ;
5767 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 =>
5975 converterContext . generateResponseName ( operationId , statusCode ) ,
6076 ) ;
6177 const requestContentTypeList = item . requestBody ? getRequestContentTypeList ( item . requestBody ) : [ ] ;
@@ -65,6 +81,7 @@ const generateCodeGeneratorParamsList = (store: Store.Type, converterContext: Co
6581
6682 const formatParams : CodeGeneratorParams = {
6783 operationId : operationId ,
84+ escapedOperationId : converterContext . escapeOperationIdText ( operationId ) ,
6885 rawRequestUri : item . requestUri ,
6986 httpMethod : item . httpMethod ,
7087 argumentParamsTypeDeclaration : converterContext . generateArgumentParamsTypeDeclaration ( operationId ) ,
@@ -88,6 +105,7 @@ const generateCodeGeneratorParamsList = (store: Store.Type, converterContext: Co
88105 responseSuccessNames : responseSuccessNames ,
89106 responseFirstSuccessName : responseSuccessNames . length === 1 ? responseSuccessNames [ 0 ] : undefined ,
90107 has2OrMoreSuccessNames : hasOver2SuccessNames ,
108+ responseErrorNames : responseErrorNames ,
91109 // Response Success Content Type
92110 successResponseContentTypes : responseSuccessContentTypes ,
93111 successResponseFirstContentType : responseSuccessContentTypes . length === 1 ? responseSuccessContentTypes [ 0 ] : undefined ,
@@ -113,7 +131,8 @@ export const generateApiClientCode = (
113131 context : ts . TransformationContext ,
114132 converterContext : ConverterContext . Types ,
115133 rewriteCodeAfterTypeDeclaration : RewriteCodeAfterTypeDeclaration ,
134+ allowOperationIds : string [ ] | undefined ,
116135) : void => {
117- const codeGeneratorParamsList = generateCodeGeneratorParamsList ( store , converterContext ) ;
136+ const codeGeneratorParamsList = generateCodeGeneratorParamsList ( store , converterContext , allowOperationIds ) ;
118137 store . addAdditionalStatement ( rewriteCodeAfterTypeDeclaration ( context , codeGeneratorParamsList ) ) ;
119138} ;
0 commit comments