@@ -422,33 +422,48 @@ export class CubeEvaluator extends CubeSymbols {
422422 }
423423 }
424424
425- protected prepareJoins ( cube : any , _errorReporter : ErrorReporter ) {
425+ protected prepareJoins ( cube : any , errorReporter : ErrorReporter ) {
426426 if ( ! cube . joins ) {
427427 return ;
428428 }
429429
430- const joins : JoinDefinition [ ] = Array . isArray ( cube . joins ) ? cube . joins : Object . values ( cube . joins ) ;
431-
432- joins . forEach ( join => {
433- // eslint-disable-next-line default-case
434- switch ( join . relationship ) {
430+ const transformRelationship = ( relationship : string ) : string => {
431+ switch ( relationship ) {
435432 case 'belongs_to' :
436433 case 'many_to_one' :
437434 case 'manyToOne' :
438- join . relationship = 'belongsTo' ;
439- break ;
435+ return 'belongsTo' ;
440436 case 'has_many' :
441437 case 'one_to_many' :
442438 case 'oneToMany' :
443- join . relationship = 'hasMany' ;
444- break ;
439+ return 'hasMany' ;
445440 case 'has_one' :
446441 case 'one_to_one' :
447442 case 'oneToOne' :
448- join . relationship = 'hasOne' ;
449- break ;
443+ return 'hasOne' ;
444+ default :
445+ return relationship ;
450446 }
451- } ) ;
447+ } ;
448+
449+ let joins : JoinDefinition [ ] = [ ] ;
450+
451+ if ( Array . isArray ( cube . joins ) ) {
452+ joins = cube . joins . map ( ( join : JoinDefinition ) => {
453+ join . relationship = transformRelationship ( join . relationship ) ;
454+ return join ;
455+ } ) ;
456+ } else if ( typeof cube . joins === 'object' ) {
457+ joins = Object . entries ( cube . joins ) . map ( ( [ name , join ] : [ string , any ] ) => {
458+ join . relationship = transformRelationship ( join . relationship ) ;
459+ join . name = name ;
460+ return join as JoinDefinition ;
461+ } ) ;
462+ } else {
463+ errorReporter . error ( `Invalid joins definition for cube '${ cube . name } ': expected an array or an object.` ) ;
464+ }
465+
466+ cube . joins = joins ;
452467 }
453468
454469 protected preparePreAggregations ( cube : any , errorReporter : ErrorReporter ) {
0 commit comments