@@ -150,46 +150,6 @@ const getAllDiscriminatorValues = ({
150150 return values ;
151151} ;
152152
153- const getMappedDiscriminatorProperty = ( {
154- context,
155- discriminator,
156- schema,
157- schemaRef,
158- } : {
159- context : Context ;
160- discriminator : NonNullable < SchemaObject [ 'discriminator' ] > ;
161- schema : SchemaObject ;
162- schemaRef : string ;
163- } ) : IR . SchemaObject | undefined => {
164- const values = getAllDiscriminatorValues ( {
165- discriminator,
166- schemaRef,
167- } ) ;
168-
169- if ( ! values . length ) {
170- return ;
171- }
172-
173- const propertyType = findDiscriminatorPropertyType ( {
174- context,
175- propertyName : discriminator . propertyName ,
176- schemas : [ schema ] ,
177- } ) ;
178-
179- const valueSchemas : ReadonlyArray < IR . SchemaObject > = values . map ( ( value ) =>
180- convertDiscriminatorValue ( value , propertyType ) ,
181- ) ;
182-
183- if ( valueSchemas . length === 1 ) {
184- return valueSchemas [ 0 ] ;
185- }
186-
187- return {
188- items : valueSchemas ,
189- logicalOperator : 'or' ,
190- } ;
191- } ;
192-
193153const parseSchemaJsDoc = ( {
194154 irSchema,
195155 schema,
@@ -418,19 +378,32 @@ const parseObject = ({
418378 }
419379
420380 if ( schema . discriminator && state . $ref ) {
421- const discriminatorProperty = getMappedDiscriminatorProperty ( {
422- context,
381+ const values = getAllDiscriminatorValues ( {
423382 discriminator : schema . discriminator ,
424- schema,
425383 schemaRef : state . $ref ,
426384 } ) ;
427385
428- if ( discriminatorProperty ) {
386+ if ( values . length ) {
387+ const propertyType = findDiscriminatorPropertyType ( {
388+ context,
389+ propertyName : schema . discriminator . propertyName ,
390+ schemas : [ schema ] ,
391+ } ) ;
392+ const valueSchemas : ReadonlyArray < IR . SchemaObject > = values . map ( ( value ) =>
393+ convertDiscriminatorValue ( value , propertyType ) ,
394+ ) ;
395+
429396 if ( ! irSchema . properties ) {
430397 irSchema . properties = { } ;
431398 }
432399
433- irSchema . properties [ schema . discriminator . propertyName ] = discriminatorProperty ;
400+ irSchema . properties [ schema . discriminator . propertyName ] =
401+ valueSchemas . length > 1
402+ ? {
403+ items : valueSchemas ,
404+ logicalOperator : 'or' ,
405+ }
406+ : valueSchemas [ 0 ] ! ;
434407 }
435408 }
436409
0 commit comments