@@ -2,6 +2,7 @@ const _ = require("lodash");
22const { collect } = require ( "./utils" ) ;
33const { parseSchema, getRefType } = require ( "./schema" ) ;
44const { checkAndRenameModelName } = require ( "./modelNames" ) ;
5+ const { getTypeData, typeInfoIsIn } = require ( "./components" ) ;
56const { inlineExtraFormatters } = require ( "./typeFormatters" ) ;
67
78const methodAliases = {
@@ -12,10 +13,21 @@ const methodAliases = {
1213 delete : ( pathName , hasPathInserts ) => _ . camelCase ( `${ pathName } _delete` )
1314}
1415
16+ const getSchemaFromRequestType = requestType => {
17+ const content = _ . get ( requestType , "content" )
18+
19+ if ( ! content ) return null ;
20+
21+ const contentByType = _ . find ( content , contentByType => contentByType . schema ) ;
22+
23+ return contentByType && contentByType . schema ;
24+ }
25+
1526const getTypeFromRequestInfo = ( requestInfo , parsedSchemas , operationId , contentType ) => {
1627 // TODO: make more flexible pick schema without content type
17- const schema = _ . get ( requestInfo , `content["${ contentType } "].schema` ) ;
18- const refType = getRefType ( requestInfo ) ;
28+ const schema = getSchemaFromRequestType ( requestInfo ) ;
29+ // const refType = getRefTypeName(requestInfo);
30+ const refTypeInfo = getRefType ( requestInfo ) ;
1931
2032 if ( schema ) {
2133 const extractedSchema = _ . get ( schema , 'additionalProperties' , schema ) ;
@@ -28,11 +40,24 @@ const getTypeFromRequestInfo = (requestInfo, parsedSchemas, operationId, content
2840 return checkAndRenameModelName ( foundSchema ? foundSchema . name : content ) ;
2941 }
3042
31- if ( refType ) {
32- // TODO: its temp solution because sometimes `swagger2openapi` create refs as operationId + name
33- const refTypeWithoutOpId = refType . replace ( operationId , '' ) ;
34- const foundedSchemaByName = _ . find ( parsedSchemas , ( { name } ) => name === refType || name === refTypeWithoutOpId )
35- return foundedSchemaByName && foundedSchemaByName . name ? checkAndRenameModelName ( foundedSchemaByName . name ) : 'any'
43+ if ( refTypeInfo ) {
44+ // const refTypeWithoutOpId = refType.replace(operationId, '');
45+ // const foundedSchemaByName = _.find(parsedSchemas, ({ name }) => name === refType || name === refTypeWithoutOpId)
46+
47+ // TODO:HACK fix problem of swagger2opeanpi
48+ const typeNameWithoutOpId = _ . replace ( refTypeInfo . typeName , operationId , '' )
49+ if ( _ . find ( parsedSchemas , schema => schema . name === typeNameWithoutOpId ) )
50+ return checkAndRenameModelName ( typeNameWithoutOpId ) ;
51+
52+ switch ( refTypeInfo . componentName ) {
53+ case "schemas" :
54+ return checkAndRenameModelName ( refTypeInfo . typeName ) ;
55+ case "responses" :
56+ case "requestBodies" :
57+ return parseSchema ( getSchemaFromRequestType ( refTypeInfo . rawTypeData ) , 'none' , inlineExtraFormatters ) . content
58+ default :
59+ return parseSchema ( refTypeInfo . rawTypeData , 'none' , inlineExtraFormatters ) . content
60+ }
3661 }
3762
3863 return 'any' ;
@@ -55,10 +80,9 @@ const getRouteName = (operationId, method, route, moduleName) => {
5580 return createCustomOperationId ( method , route , moduleName ) ;
5681}
5782
58- const parseRoutes = ( routes , parsedSchemas , components ) =>
59- _ . entries ( routes )
83+ const parseRoutes = ( { paths } , parsedSchemas ) =>
84+ _ . entries ( paths )
6085 . reduce ( ( routes , [ route , requestInfoByMethodsMap ] ) => {
61- const globalParametersMap = _ . get ( components , "parameters" , { } ) ;
6286 parameters = _ . get ( requestInfoByMethodsMap , 'parameters' ) ;
6387
6488 // TODO: refactor that hell
@@ -90,16 +114,14 @@ const parseRoutes = (routes, parsedSchemas, components) =>
90114 const pathParams = collect ( parameters , parameter => {
91115 if ( parameter . in === 'path' ) return parameter ;
92116
93- const refTypeName = getRefType ( parameter ) ;
94- const globalParam = refTypeName && globalParametersMap [ refTypeName ]
95- return globalParam && globalParametersMap [ refTypeName ] . in === "path" && globalParam
117+ const refTypeInfo = getRefType ( parameter ) ;
118+ return refTypeInfo && refTypeInfo . rawTypeData . in === "path" && refTypeInfo . rawTypeData
96119 } )
97120 const queryParams = collect ( parameters , parameter => {
98121 if ( parameter . in === 'query' ) return parameter ;
99122
100- const refTypeName = getRefType ( parameter ) ;
101- const globalParam = refTypeName && globalParametersMap [ refTypeName ]
102- return globalParam && globalParametersMap [ refTypeName ] . in === "query" && globalParam ;
123+ const refTypeInfo = getRefType ( parameter ) ;
124+ return refTypeInfo && refTypeInfo . rawTypeData . in === "query" && refTypeInfo . rawTypeData
103125 } )
104126 const moduleName = _ . camelCase ( route . split ( '/' ) . filter ( Boolean ) [ 0 ] ) ;
105127
0 commit comments