@@ -2,6 +2,7 @@ import inflection from 'inflection';
22import R from 'ramda' ;
33import camelCase from 'camelcase' ;
44
5+ import { getEnv } from '@cubejs-backend/shared' ;
56import { CubeSymbols } from './CubeSymbols' ;
67import { UserError } from './UserError' ;
78import { BaseMeasure } from '../adapter' ;
@@ -43,25 +44,34 @@ export class CubeToMetaTransformer {
4344
4445 const isCubeVisible = this . isVisible ( cube , true ) ;
4546
46- const flatFolderSeparator = '/' ;
47+ const flatFolderSeparator = getEnv ( 'nestedFoldersDelimiter' ) ;
4748 const flatFolders = [ ] ;
4849
49- const processFolder = ( folder , path = [ ] ) => {
50+ const processFolder = ( folder , path = [ ] , mergedMembers = [ ] ) => {
5051 const flatMembers = [ ] ;
5152 const nestedMembers = folder . includes . map ( member => {
5253 if ( member . type === 'folder' ) {
53- return processFolder ( member , [ ...path , folder . name ] ) ;
54+ return processFolder ( member , [ ...path , folder . name ] , flatMembers ) ;
5455 }
5556 const memberName = `${ cube . name } .${ member . name } ` ;
5657 flatMembers . push ( memberName ) ;
5758
58- return ` ${ cube . name } . ${ member . name } ` ;
59+ return memberName ;
5960 } ) ;
6061
61- flatFolders . push ( {
62- name : [ ...path , folder . name ] . join ( flatFolderSeparator ) ,
63- members : flatMembers ,
64- } ) ;
62+ if ( flatFolderSeparator !== '' ) {
63+ flatFolders . push ( {
64+ name : [ ...path , folder . name ] . join ( flatFolderSeparator ) ,
65+ members : flatMembers ,
66+ } ) ;
67+ } else if ( path . length > 0 ) {
68+ mergedMembers . push ( ...flatMembers ) ;
69+ } else { // We're at the root level
70+ flatFolders . push ( {
71+ name : folder . name ,
72+ members : flatMembers ,
73+ } ) ;
74+ }
6575
6676 return {
6777 name : folder . name ,
0 commit comments