7
7
// Repository https://github.com/acacode/swagger-typescript-api
8
8
9
9
const mustache = require ( "mustache" ) ;
10
+ const prettier = require ( "prettier" ) ;
10
11
const _ = 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" ) ;
16
17
const { createComponentsMap, filterComponentsMap } = require ( "./components" ) ;
17
- const { getTemplate, createFile, pathIsExist } = require ( ' ./files' ) ;
18
+ const { getTemplate, createFile, pathIsExist } = require ( " ./files" ) ;
18
19
const { addToConfig, config : defaults } = require ( "./config" ) ;
19
20
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
+ } ;
21
29
22
30
module . exports = {
23
31
generateApi : ( {
@@ -29,58 +37,68 @@ module.exports = {
29
37
defaultResponseAsSuccess = defaults . defaultResponseAsSuccess ,
30
38
generateRouteTypes = defaults . generateRouteTypes ,
31
39
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" ) ;
43
51
44
- const { info , paths , servers , components } = swaggerSchema ;
52
+ addToConfig ( { swaggerSchema } ) ;
45
53
46
- const apiTemplate = getTemplate ( 'api' ) ;
47
- const clientTemplate = getTemplate ( 'client' ) ;
48
- const routeTypesTemplate = getTemplate ( 'route-types' ) ;
54
+ const { info, paths, servers, components } = swaggerSchema ;
49
55
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" ) ;
52
59
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
+ } ;
73
77
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
+ ) ;
78
91
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
+ }
86
96
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