@@ -4,7 +4,7 @@ import type { OpenApi } from '../interfaces/OpenApi';
44import type { OpenApiSchema } from '../interfaces/OpenApiSchema' ;
55import { extendEnum } from './extendEnum' ;
66import { getEnum } from './getEnum' ;
7- import { getModelComposition } from './getModelComposition' ;
7+ import { findModelComposition , getModelComposition } from './getModelComposition' ;
88import { getModelDefault } from './getModelDefault' ;
99import { getModelProperties } from './getModelProperties' ;
1010import { getType } from './getType' ;
@@ -83,19 +83,24 @@ export const getModel = (
8383 model . imports . push ( ...arrayItems . imports ) ;
8484 model . default = getModelDefault ( definition , model ) ;
8585 return model ;
86- } else if ( definition . items . anyOf && parentDefinition ) {
87- return getModel ( openApi , definition . items ) ;
88- } else {
89- const arrayItems = getModel ( openApi , definition . items ) ;
90- model . export = 'array' ;
91- model . type = arrayItems . type ;
92- model . base = arrayItems . base ;
93- model . template = arrayItems . template ;
94- model . link = arrayItems ;
95- model . imports . push ( ...arrayItems . imports ) ;
96- model . default = getModelDefault ( definition , model ) ;
97- return model ;
9886 }
87+
88+ if ( definition . items . anyOf && parentDefinition && parentDefinition . type ) {
89+ const foundComposition = findModelComposition ( parentDefinition ) ;
90+ if ( foundComposition && foundComposition . definitions . some ( definition => definition . type !== 'array' ) ) {
91+ return getModel ( openApi , definition . items ) ;
92+ }
93+ }
94+
95+ const arrayItems = getModel ( openApi , definition . items ) ;
96+ model . export = 'array' ;
97+ model . type = arrayItems . type ;
98+ model . base = arrayItems . base ;
99+ model . template = arrayItems . template ;
100+ model . link = arrayItems ;
101+ model . imports . push ( ...arrayItems . imports ) ;
102+ model . default = getModelDefault ( definition , model ) ;
103+ return model ;
99104 }
100105
101106 if (
@@ -125,31 +130,16 @@ export const getModel = (
125130 }
126131 }
127132
128- if ( definition . oneOf ?. length ) {
129- const composition = getModelComposition ( openApi , definition , definition . oneOf , 'one-of' , getModel ) ;
130- model . export = composition . type ;
131- model . imports . push ( ...composition . imports ) ;
132- model . properties . push ( ...composition . properties ) ;
133- model . enums . push ( ...composition . enums ) ;
134- return model ;
135- }
136-
137- if ( definition . anyOf ?. length ) {
138- const composition = getModelComposition ( openApi , definition , definition . anyOf , 'any-of' , getModel ) ;
139- model . export = composition . type ;
140- model . imports . push ( ...composition . imports ) ;
141- model . properties . push ( ...composition . properties ) ;
142- model . enums . push ( ...composition . enums ) ;
143- return model ;
144- }
145-
146- if ( definition . allOf ?. length ) {
147- const composition = getModelComposition ( openApi , definition , definition . allOf , 'all-of' , getModel ) ;
148- model . export = composition . type ;
149- model . imports . push ( ...composition . imports ) ;
150- model . properties . push ( ...composition . properties ) ;
151- model . enums . push ( ...composition . enums ) ;
152- return model ;
133+ const foundComposition = findModelComposition ( definition ) ;
134+ if ( foundComposition ) {
135+ const composition = getModelComposition ( {
136+ ...foundComposition ,
137+ definition,
138+ getModel,
139+ model,
140+ openApi,
141+ } ) ;
142+ return { ...model , ...composition } ;
153143 }
154144
155145 if ( definition . type === 'object' ) {
0 commit comments