@@ -10,7 +10,7 @@ export const generateTemplate = async (
1010 docs : OpenAPIV3 . Document ,
1111 config : Pick < OpenapiClientConfig , 'projectName' | 'classMode' > ,
1212) => {
13- const { projectName, classMode = 'rest' } = config ;
13+ const { projectName = '' , classMode = 'rest' } = config ;
1414 const className = `OpenapiClient${ upperFirst ( camelCase ( projectName ) ) } ` ;
1515 const metas = documentToMeta ( docs ) ;
1616
@@ -21,28 +21,27 @@ export const generateTemplate = async (
2121 ? generateUriModelClassWithGroup ( className , metas )
2222 : generateUriModelClass ( className , metas ) ;
2323
24- const dts = `
24+ const content = `
25+ import { BaseOpenapiClient } from 'foca-openapi';
26+
2527 ${ generateNamespaceTpl ( className , metas ) }
26- ${ classTpl . dts }
28+ ${ classTpl }
2729 ${ generatePathRelationTpl ( className , metas ) }
30+ ${ generateContentTypeTpl ( metas ) }
2831` ;
2932
30- const js = `
31- ${ classTpl . js }
32- ${ generateContentTypeTpl ( className , metas ) }
33- ` ;
34-
3533 return {
36- [ className ] : {
37- dts : await prettier . format ( dts , { parser : 'typescript' , printWidth : 120 } ) ,
38- js : await prettier . format ( js , { parser : 'typescript' , printWidth : 120 } ) ,
39- } ,
34+ [ projectName ] : await prettier . format ( content , {
35+ parser : 'typescript' ,
36+ printWidth : 120 ,
37+ semi : true ,
38+ } ) ,
4039 } ;
4140} ;
4241
4342export const generateNamespaceTpl = ( className : string , metas : Metas ) => {
4443 return `
45- declare namespace ${ className } {
44+ export namespace ${ className } {
4645 ${ methods
4746 . flatMap ( ( method ) => {
4847 let content = metas [ method ] . flatMap ( ( meta ) => {
@@ -51,7 +50,7 @@ declare namespace ${className} {
5150 ( < const > [ 'query' , 'params' , 'body' , 'response' ] ) . forEach ( ( key ) => {
5251 const interfaceName = upperFirst ( camelCase ( meta . key + '_' + key ) ) ;
5352 if ( meta [ key ] . types . length ) {
54- opts . push ( `type ${ interfaceName } = ${ meta [ key ] . types . join ( ' | ' ) } \n` ) ;
53+ opts . push ( `export type ${ interfaceName } = ${ meta [ key ] . types . join ( ' | ' ) } \n` ) ;
5554 }
5655 } ) ;
5756
@@ -64,9 +63,8 @@ declare namespace ${className} {
6463} ;
6564
6665export const generateMethodModeClass = ( className : string , metas : Metas ) => {
67- return {
68- dts : `
69- declare class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
66+ return `
67+ export class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
7068 ${ methods
7169 . map ( ( method ) => {
7270 if ( ! metas [ method ] . length ) return '' ;
@@ -90,62 +88,41 @@ declare class ${className}<T extends object = object> extends BaseOpenapiClient<
9088
9189 return `${ method } <K extends keyof ${ className } _${ method } _paths>(
9290 uri: K, ...rest: ${ opts }
93- ): Promise<${ className } _${ method } _paths[K]['response']>` ;
94- } )
95- . join ( '\n' ) }
96- }` ,
97- js : `
98- var ${ className } = class extends BaseOpenapiClient {
99- ${ methods
100- . map ( ( method ) => {
101- if ( ! metas [ method ] . length ) return '' ;
102- return `${ method } (uri, opts) {
103- return this.request(uri, "get", opts);
104- }` ;
91+ ): Promise<${ className } _${ method } _paths[K]['response']> {
92+ return this.request(uri, "get", ...rest);
93+ }
94+ ` ;
10595 } )
10696 . join ( '\n' ) }
10797
108- pickContentTypes(uri, method) {
109- return contentTypes${ className } [method + " " + uri] || [void 0, void 0];
98+ protected override pickContentTypes(uri: string , method: string ) {
99+ return contentTypes[method + " " + uri] || [void 0, void 0];
110100 }
111- };` ,
112- } ;
101+ }` ;
113102} ;
114103
115104export const generateUriModelClass = ( className : string , metas : Metas ) => {
116- return {
117- dts : `
118- declare class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
105+ return `
106+ export class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
119107 ${ methods
120108 . flatMap ( ( method ) => {
121109 return metas [ method ] . map ( ( meta ) => {
122110 const optional =
123111 meta . query . optional && meta . params . optional && meta . body . optional ;
124112
125113 return `
126- ${ generateComments ( meta ) } ${ camelCase ( meta . key ) } (opts${ optional ? '?' : '' } : ${ className } _${ method } _paths['${ meta . uri } ']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${ className } _${ method } _paths['${ meta . uri } ']['response']>` ;
127- } ) ;
128- } )
129- . join ( '\n' ) }
130- }` ,
131- js : `
132- var ${ className } = class extends BaseOpenapiClient {
133- ${ methods
134- . flatMap ( ( method ) => {
135- return metas [ method ] . map ( ( meta ) => {
136- return `
137- ${ generateComments ( meta ) } ${ camelCase ( meta . key ) } (opts) {
114+ ${ generateComments ( meta ) } ${ camelCase ( meta . key ) } (opts${ optional ? '?' : '' } : ${ className } _${ method } _paths['${ meta . uri } ']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${ className } _${ method } _paths['${ meta . uri } ']['response']> {
138115 return this.request('${ meta . uri } ', "${ method } ", opts);
139- }` ;
116+ }
117+ ` ;
140118 } ) ;
141119 } )
142120 . join ( '\n' ) }
143121
144- pickContentTypes(uri, method) {
145- return contentTypes${ className } [method + " " + uri] || [void 0, void 0];
146- }
147- };` ,
148- } ;
122+ protected override pickContentTypes(uri: string, method: string) {
123+ return contentTypes[method + " " + uri] || [void 0, void 0];
124+ }
125+ }` ;
149126} ;
150127
151128export const generateUriModelClassWithGroup = ( className : string , metas : Metas ) => {
@@ -155,12 +132,11 @@ export const generateUriModelClassWithGroup = (className: string, metas: Metas)
155132 ) ,
156133 ] ;
157134
158- return {
159- dts : `
160- declare class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
135+ return `
136+ export class ${ className } <T extends object = object> extends BaseOpenapiClient<T> {
161137 ${ namespaces
162138 . map ( ( ns ) => {
163- return `readonly ${ snakeCase ( ns ) } : {
139+ return `readonly ${ snakeCase ( ns ) } = {
164140 ${ methods
165141 . flatMap ( ( method ) => {
166142 return metas [ method ]
@@ -169,44 +145,26 @@ declare class ${className}<T extends object = object> extends BaseOpenapiClient<
169145 const optional =
170146 meta . query . optional && meta . params . optional && meta . body . optional ;
171147
172- return `${ generateComments ( meta ) } ${ camelCase ( meta . key ) } (opts${ optional ? '?' : '' } : ${ className } _${ method } _paths['${ meta . uri } ']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${ className } _${ method } _paths['${ meta . uri } ']['response']>` ;
173- } ) ;
174- } )
175- . join ( '\n' ) }
176- }` ;
177- } )
178- . join ( '\n' ) }
179- }` ,
180- js : `
181- var ${ className } = class extends BaseOpenapiClient {
182- ${ namespaces
183- . map ( ( ns ) => {
184- return `${ snakeCase ( ns ) } = {
185- ${ methods
186- . flatMap ( ( method ) => {
187- return metas [ method ]
188- . filter ( ( meta ) => meta . tags . includes ( ns ) )
189- . map ( ( meta ) => {
190- return `${ generateComments ( meta ) } ${ camelCase ( meta . key ) } : (opts) => {
148+ return `${ generateComments ( meta ) } ${ camelCase ( meta . key ) } (opts${ optional ? '?' : '' } : ${ className } _${ method } _paths['${ meta . uri } ']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${ className } _${ method } _paths['${ meta . uri } ']['response']> {
191149 return this.request('${ meta . uri } ', '${ method } ', opts);
192- }, ` ;
150+ }` ;
193151 } ) ;
194152 } )
195- . join ( '\n' ) }
196- }` ;
153+ . join ( ', \n' ) }
154+ }` ;
197155 } )
198156 . join ( '\n' ) }
199157
200- pickContentTypes(uri, method) {
201- return contentTypes${ className } [method + ' ' + uri] || [void 0, void 0];
202- }
203- };` ,
204- } ;
158+ protected override pickContentTypes(uri: string, method: string) {
159+ return contentTypes[method + " " + uri] || [void 0, void 0];
160+ }
161+ }` ;
205162} ;
206163
207- export const generateContentTypeTpl = ( className : string , metas : Metas ) => {
164+ export const generateContentTypeTpl = ( metas : Metas ) => {
208165 return `
209- const contentTypes${ className } = {
166+ const contentTypes: Record<string, [BaseOpenapiClient.UserInputOpts['requestBodyType'],
167+ BaseOpenapiClient.UserInputOpts['responseType']]> = {
210168 ${ methods
211169 . map ( ( method ) => {
212170 if ( ! metas [ method ] . length ) return '' ;
0 commit comments