@@ -55,6 +55,31 @@ import {
55
55
56
56
const defaultServerUrl = 'http://example.com' ;
57
57
58
+ /**
59
+ * Calculate model names to export based on the exportModels configuration.
60
+ */
61
+ function calculateModelNamesToExport (
62
+ exportModels : Exclude < OpenApiClientGeneratorConfig [ 'client' ] , false > [ 'exportModels' ] = 'none' ,
63
+ modelImportInfos : ModelImportInfo [ ]
64
+ ) : Set < string > {
65
+ if ( exportModels === 'none' ) {
66
+ return new Set ( ) ;
67
+ }
68
+ if ( exportModels === 'all' ) {
69
+ return new Set ( modelImportInfos . map ( ( { modelName} ) => modelName ) ) ;
70
+ }
71
+ if ( 'models' in exportModels ) {
72
+ return new Set ( exportModels . models ) ;
73
+ }
74
+ if ( 'schemas' in exportModels ) {
75
+ const schemaNamesSet = new Set ( exportModels . schemas ) ;
76
+ return new Set (
77
+ modelImportInfos . filter ( ( { schemaName} ) => schemaNamesSet . has ( schemaName ) ) . map ( ( { modelName} ) => modelName )
78
+ ) ;
79
+ }
80
+ throw new Error ( 'Invalid exportModels configuration.' ) ;
81
+ }
82
+
58
83
export function generateClient ( {
59
84
commonHttpClientClassName,
60
85
commonHttpClientClassOptionsName,
@@ -298,20 +323,16 @@ export function generateClient({
298
323
const exportTypes : ExportNamedDeclaration = exportNamedDeclaration ( null , [ ] ) ;
299
324
exportTypes . exportKind = 'type' ;
300
325
301
- if ( exportModels && exportModels !== 'none' ) {
302
- const modelsToExport = new Set (
303
- exportModels === 'all' ? modelImportInfos . map ( ( { modelName} ) => modelName ) : exportModels . models
304
- ) ;
305
- for ( const { modelName, importPath} of modelImportInfos ) {
306
- if ( ! modelsToExport . has ( modelName ) ) {
307
- continue ;
308
- }
309
- addDependencyImport ( dependencyImports , getRelativeImportPath ( clientImportPath , importPath ) , modelName , {
310
- kind : 'type' ,
311
- entity : { name : modelName }
312
- } ) ;
313
- exportTypes . specifiers . push ( exportSpecifier ( identifier ( modelName ) , identifier ( modelName ) ) ) ;
326
+ const modelNamesToExport = calculateModelNamesToExport ( exportModels , modelImportInfos ) ;
327
+ for ( const { modelName, importPath} of modelImportInfos ) {
328
+ if ( ! modelNamesToExport . has ( modelName ) ) {
329
+ continue ;
314
330
}
331
+ addDependencyImport ( dependencyImports , getRelativeImportPath ( clientImportPath , importPath ) , modelName , {
332
+ kind : 'type' ,
333
+ entity : { name : modelName }
334
+ } ) ;
335
+ exportTypes . specifiers . push ( exportSpecifier ( identifier ( modelName ) , identifier ( modelName ) ) ) ;
315
336
}
316
337
317
338
const exports : ExportNamedDeclaration = exportNamedDeclaration ( null , [ ] ) ;
0 commit comments