@@ -57,7 +57,6 @@ function removeEmptyModules(modules) {
5757 module . classes . length === 0
5858 && module . components . length === 0
5959 && module . functions . length === 0
60- && module . helpers . length === 0
6160 && module . variables . length === 0
6261 ) ;
6362 } ) ;
@@ -137,99 +136,82 @@ function hoistDefaults(modules) {
137136 delete modules [ m ] ;
138137 }
139138 }
139+
140+ return modules ;
140141}
141142
142- function generateResolvedTypedNavigationItems ( collection , file , type ) {
143- return collection . filter ( c => c . file . includes ( `${ type } s/` ) ) . map ( ( c ) => {
144- let segments = file . split ( '/' ) ;
143+
144+
145+ const RESOLVED_TYPES = [
146+ 'components' ,
147+ 'helpers' ,
148+ 'controllers' ,
149+ 'mixins' ,
150+ 'models' ,
151+ 'services'
152+ ] ;
153+
154+ function generateResolvedTypeNavigationItems ( modules , type ) {
155+ let items = modules . map ( m => {
156+ let segments = m . file . split ( '/' ) ;
145157 let fileName = segments . pop ( ) ;
146158
147- if ( fileName === type ) {
159+ if ( type . match ( fileName ) ) {
148160 fileName = segments . pop ( ) ;
149161 }
150162
151163 let name ;
152- if ( [ 'component ' , 'helper ' ] . includes ( type ) ) {
164+ if ( [ 'components ' , 'helpers ' ] . includes ( type ) ) {
153165 name = `{{${ fileName } }}` ;
154166 } else {
155167 name = _ . upperFirst ( _ . camelCase ( fileName ) ) ;
156168 }
157169
158170 return {
159- path : `${ type } s /${ fileName } ` ,
171+ path : `${ type } /${ fileName } ` ,
160172 name
161173 } ;
162174 } ) ;
175+
176+ return _ . sortBy ( items , [ 'name' ] ) ;
163177}
164178
165- function generateModuleNavigationItems ( module , collection ) {
166- return collection . map ( ( item ) => {
167- return {
168- path : `root/${ item . id || module . id } ` ,
169- name : item . name ,
170- isDefault : item . exportType === 'default'
171- } ;
172- } ) ;
179+ function generateModuleNavigationItems ( modules , type ) {
180+ let navItems = modules . reduce ( ( navItems , m ) => {
181+ let items = m [ type ] . map ( ( item ) => {
182+ return {
183+ path : `root/${ item . id || module . id } ` ,
184+ name : item . name ,
185+ isDefault : item . exportType === 'default'
186+ } ;
187+ } ) ;
188+
189+ if ( items . length > 0 ) {
190+ navItems [ m . file ] = _ . sortBy ( items , [ 'name' ] ) ;
191+ }
192+
193+ return navItems ;
194+ } , { } ) ;
195+
196+ return hoistDefaults ( navItems ) ;
173197}
174198
175199function generateNavigationIndex ( modules , klasses ) {
176- let components = [ ] ;
177- let controllers = [ ] ;
178- let helpers = [ ] ;
179- let mixins = [ ] ;
180- let models = [ ] ;
181- let services = [ ] ;
182-
183- let classes = { } ;
184- let functions = { } ;
185- let variables = { } ;
186-
187- modules . forEach ( ( m ) => {
188- let file = m . file ;
189-
190- let componentItems = generateResolvedTypedNavigationItems ( m . components , file , 'component' ) ;
191- let helperItems = generateResolvedTypedNavigationItems ( m . helpers , file , 'helper' ) ;
192-
193- let controllerItems = generateResolvedTypedNavigationItems ( m . classes , file , 'controller' ) ;
194- let mixinItems = generateResolvedTypedNavigationItems ( m . classes , file , 'mixin' ) ;
195- let modelItems = generateResolvedTypedNavigationItems ( m . classes , file , 'model' ) ;
196- let serviceItems = generateResolvedTypedNavigationItems ( m . classes , file , 'service' ) ;
197-
198- let classItems = generateModuleNavigationItems (
199- m , m . classes . filter ( c => ! c . file . match ( / c o n t r o l l e r s \/ | m i x i n s \/ | m o d e l s \/ | s e r v i c e s \/ / ) )
200- ) ;
200+ let navigationIndex = { } ;
201201
202- let functionItems = generateModuleNavigationItems ( m , m . functions ) ;
203- let variableItems = generateModuleNavigationItems ( m , m . variables ) ;
202+ for ( let type of RESOLVED_TYPES ) {
203+ let resolvedModules = modules . filter ( m => m . file . match ( ` ${ type } /` ) && ! m . file . match ( 'utils/' ) ) ;
204204
205- components = components . concat ( componentItems ) ;
206- controllers = controllers . concat ( controllerItems ) ;
207- helpers = helpers . concat ( helperItems ) ;
208- mixins = mixins . concat ( mixinItems ) ;
209- models = models . concat ( modelItems ) ;
210- services = services . concat ( serviceItems ) ;
205+ navigationIndex [ type ] = generateResolvedTypeNavigationItems ( resolvedModules , type ) ;
206+ }
211207
212- classes [ file ] = _ . sortBy ( classItems , [ 'name' ] ) ;
213- functions [ file ] = _ . sortBy ( functionItems , [ 'name' ] ) ;
214- variables [ file ] = _ . sortBy ( variableItems , [ 'name' ] ) ;
215- } ) ;
208+ let nonResolvedModules = modules . filter ( m => {
209+ return ! m . file . match ( new RegExp ( `(${ RESOLVED_TYPES . join ( '|' ) } )/` ) ) || m . file . match ( 'utils/' ) ;
210+ } )
216211
217- hoistDefaults ( classes ) ;
218- hoistDefaults ( functions ) ;
219- hoistDefaults ( variables ) ;
220-
221- let navigationIndex = {
222- components : _ . sortBy ( components , [ 'path' ] ) ,
223- controllers : _ . sortBy ( controllers , [ 'name' ] ) ,
224- helpers : _ . sortBy ( helpers , [ 'path' ] ) ,
225- mixins : _ . sortBy ( mixins , [ 'name' ] ) ,
226- models : _ . sortBy ( models , [ 'name' ] ) ,
227- services : _ . sortBy ( services , [ 'name' ] ) ,
228-
229- classes,
230- functions,
231- variables
232- } ;
212+ navigationIndex . classes = generateModuleNavigationItems ( nonResolvedModules , 'classes' ) ;
213+ navigationIndex . functions = generateModuleNavigationItems ( nonResolvedModules , 'functions' ) ;
214+ navigationIndex . variables = generateModuleNavigationItems ( nonResolvedModules , 'variables' ) ;
233215
234216 for ( let type in navigationIndex ) {
235217 let items = navigationIndex [ type ] ;
0 commit comments