77// Repository https://github.com/acacode/swagger-typescript-api
88
99const mustache = require ( "mustache" ) ;
10+ const prettier = require ( "prettier" ) ;
1011const _ = require ( "lodash" ) ;
11- const { parseSchemas } = require ( ' ./schema' ) ;
12- const { parseRoutes, groupRoutes } = require ( ' ./routes' ) ;
13- const { createApiConfig } = require ( ' ./apiConfig' ) ;
14- const { getModelType } = require ( ' ./modelTypes' ) ;
15- const { getSwaggerObject } = require ( ' ./swagger' ) ;
12+ const { parseSchemas } = require ( " ./schema" ) ;
13+ const { parseRoutes, groupRoutes } = require ( " ./routes" ) ;
14+ const { createApiConfig } = require ( " ./apiConfig" ) ;
15+ const { getModelType } = require ( " ./modelTypes" ) ;
16+ const { getSwaggerObject } = require ( " ./swagger" ) ;
1617const { createComponentsMap, filterComponentsMap } = require ( "./components" ) ;
17- const { getTemplate, createFile, pathIsExist } = require ( ' ./files' ) ;
18+ const { getTemplate, createFile, pathIsExist } = require ( " ./files" ) ;
1819const { addToConfig, config : defaults } = require ( "./config" ) ;
1920
20- mustache . escape = value => value
21+ mustache . escape = value => value ;
22+
23+ const prettierConfig = {
24+ printWidth : 120 ,
25+ tabWidth : 2 ,
26+ trailingComma : "all" ,
27+ parser : "typescript" ,
28+ } ;
2129
2230module . exports = {
2331 generateApi : ( {
@@ -29,58 +37,68 @@ module.exports = {
2937 defaultResponseAsSuccess = defaults . defaultResponseAsSuccess ,
3038 generateRouteTypes = defaults . generateRouteTypes ,
3139 generateClient = defaults . generateClient ,
32- } ) => new Promise ( ( resolve , reject ) => {
33- addToConfig ( {
34- defaultResponseAsSuccess ,
35- generateRouteTypes ,
36- generateClient ,
37- generateResponses ,
38- } )
39- getSwaggerObject ( input , url ) . then ( swaggerSchema => {
40- console . log ( '☄️ start generating your typescript api' )
41-
42- addToConfig ( { swaggerSchema } ) ;
40+ } ) =>
41+ new Promise ( ( resolve , reject ) => {
42+ addToConfig ( {
43+ defaultResponseAsSuccess ,
44+ generateRouteTypes ,
45+ generateClient ,
46+ generateResponses ,
47+ } ) ;
48+ getSwaggerObject ( input , url )
49+ . then ( swaggerSchema => {
50+ console . log ( "☄️ start generating your typescript api" ) ;
4351
44- const { info , paths , servers , components } = swaggerSchema ;
52+ addToConfig ( { swaggerSchema } ) ;
4553
46- const apiTemplate = getTemplate ( 'api' ) ;
47- const clientTemplate = getTemplate ( 'client' ) ;
48- const routeTypesTemplate = getTemplate ( 'route-types' ) ;
54+ const { info, paths, servers, components } = swaggerSchema ;
4955
50- const componentsMap = createComponentsMap ( components ) ;
51- const schemasMap = filterComponentsMap ( componentsMap , "schemas" )
56+ const apiTemplate = getTemplate ( "api" ) ;
57+ const clientTemplate = getTemplate ( "client" ) ;
58+ const routeTypesTemplate = getTemplate ( "route-types" ) ;
5259
53- const parsedSchemas = parseSchemas ( components ) ;
54- const routes = parseRoutes ( swaggerSchema , parsedSchemas , componentsMap , components ) ;
55- const hasSecurityRoutes = routes . some ( route => route . security ) ;
56- const hasQueryRoutes = routes . some ( route => route . hasQuery ) ;
57- const apiConfig = createApiConfig ( { info, servers } , hasSecurityRoutes ) ;
58-
59- const configuration = {
60- apiConfig,
61- modelTypes : _ . map ( schemasMap , getModelType ) ,
62- hasSecurityRoutes,
63- hasQueryRoutes,
64- generateResponses,
65- routes : groupRoutes ( routes ) ,
66- } ;
67-
68- const sourceFile = [
69- mustache . render ( apiTemplate , configuration ) ,
70- generateRouteTypes ? mustache . render ( routeTypesTemplate , configuration ) : '' ,
71- generateClient ? mustache . render ( clientTemplate , configuration ) : '' ,
72- ] . join ( '' ) ;
60+ const componentsMap = createComponentsMap ( components ) ;
61+ const schemasMap = filterComponentsMap ( componentsMap , "schemas" ) ;
62+
63+ const parsedSchemas = parseSchemas ( components ) ;
64+ const routes = parseRoutes ( swaggerSchema , parsedSchemas , componentsMap , components ) ;
65+ const hasSecurityRoutes = routes . some ( route => route . security ) ;
66+ const hasQueryRoutes = routes . some ( route => route . hasQuery ) ;
67+ const apiConfig = createApiConfig ( { info, servers } , hasSecurityRoutes ) ;
68+
69+ const configuration = {
70+ apiConfig,
71+ modelTypes : _ . map ( schemasMap , getModelType ) ,
72+ hasSecurityRoutes,
73+ hasQueryRoutes,
74+ generateResponses,
75+ routes : groupRoutes ( routes ) ,
76+ } ;
7377
74- if ( pathIsExist ( output ) ) {
75- createFile ( output , name , sourceFile ) ;
76- console . log ( `✔️ your typescript api file created in "${ output } "` )
77- }
78+ const sourceFile = prettier . format (
79+ [
80+ mustache . render ( apiTemplate , configuration ) ,
81+ generateRouteTypes ? mustache . render ( routeTypesTemplate , configuration ) : "" ,
82+ generateClient ? mustache . render ( clientTemplate , configuration ) : "" ,
83+ ] . join ( "" ) ,
84+ {
85+ printWidth : 120 ,
86+ tabWidth : 2 ,
87+ trailingComma : "all" ,
88+ parser : "typescript" ,
89+ } ,
90+ ) ;
7891
79- resolve ( sourceFile ) ;
80- } ) . catch ( e => {
81- reject ( e ) ;
82- throw new Error ( 'Swagger schema parse error!\r\n ' + e )
83- } )
84- } )
85- }
92+ if ( pathIsExist ( output ) ) {
93+ createFile ( output , name , sourceFile ) ;
94+ console . log ( `✔️ your typescript api file created in "${ output } "` ) ;
95+ }
8696
97+ resolve ( sourceFile ) ;
98+ } )
99+ . catch ( e => {
100+ reject ( e ) ;
101+ throw new Error ( "Swagger schema parse error!\r\n " + e ) ;
102+ } ) ;
103+ } ) ,
104+ } ;
0 commit comments