@@ -55,6 +55,31 @@ import {
5555
5656const defaultServerUrl = 'http://example.com' ;
5757
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+
5883export function generateClient ( {
5984 commonHttpClientClassName,
6085 commonHttpClientClassOptionsName,
@@ -298,20 +323,16 @@ export function generateClient({
298323 const exportTypes : ExportNamedDeclaration = exportNamedDeclaration ( null , [ ] ) ;
299324 exportTypes . exportKind = 'type' ;
300325
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 ;
314330 }
331+ addDependencyImport ( dependencyImports , getRelativeImportPath ( clientImportPath , importPath ) , modelName , {
332+ kind : 'type' ,
333+ entity : { name : modelName }
334+ } ) ;
335+ exportTypes . specifiers . push ( exportSpecifier ( identifier ( modelName ) , identifier ( modelName ) ) ) ;
315336 }
316337
317338 const exports : ExportNamedDeclaration = exportNamedDeclaration ( null , [ ] ) ;
0 commit comments