@@ -89,6 +89,8 @@ export class Converter {
8989 return this . convertArray ( parsedNode , parsedComponents , components ) ;
9090 } else if ( parsed . isUnion ( parsedNode ) ) {
9191 return this . convertUnion ( parsedNode , parsedComponents , components ) ;
92+ } else if ( parsed . isXor ( parsedNode ) ) {
93+ return this . convertXor ( parsedNode , parsedComponents , components ) ;
9294 } else if ( parsed . isComposite ( parsedNode ) ) {
9395 return this . convertComposite ( parsedNode , parsedComponents , components ) ;
9496 } else if ( parsed . isExclusion ( parsedNode ) ) {
@@ -136,16 +138,37 @@ export class Converter {
136138 if ( parsedNode . definitions . length === 1 ) {
137139 return this . convertParsedNode ( parsedNode . definitions [ 0 ] , parsedComponents , components ) ;
138140 }
141+
142+ let discriminatorPropertyName : string | undefined ;
143+ let discriminatorMapping : Record < string , optimized . OptimizedNode > | undefined ;
144+
145+ if ( 'discriminatorPropertyName' in parsedNode && parsedNode . discriminatorPropertyName ) {
146+ discriminatorPropertyName = parsedNode . discriminatorPropertyName ;
147+
148+ if ( parsedNode . discriminatorMapping ) {
149+ discriminatorMapping = { } ;
150+ for ( const [ key , value ] of Object . entries ( parsedNode . discriminatorMapping ) ) {
151+ discriminatorMapping [ key ] = this . convertParsedNode ( value , parsedComponents , components ) ;
152+ }
153+ }
154+ }
155+
139156 return {
140157 ...parsedNode ,
141158 definitions : parsedNode . definitions . map ( p => this . convertParsedNode ( p , parsedComponents , components ) ) ,
159+ discriminatorPropertyName,
160+ discriminatorMapping,
142161 } ;
143162 }
144163
145164 private convertUnion ( parsedNode : parsed . Union , parsedComponents : parsed . Components , components : optimized . Components ) {
146165 return this . compress ( parsedNode , parsedComponents , components ) ;
147166 }
148167
168+ private convertXor ( parsedNode : parsed . Xor , parsedComponents : parsed . Components , components : optimized . Components ) {
169+ return this . compress ( parsedNode , parsedComponents , components ) ;
170+ }
171+
149172 private convertComposite ( parsedNode : parsed . Composite , parsedComponents : parsed . Components , components : optimized . Components ) {
150173 return this . compress ( parsedNode , parsedComponents , components ) ;
151174 }
0 commit comments