11import { FabrixApp } from '@fabrix/fabrix'
2- import { get } from 'lodash'
2+ import { get , omit } from 'lodash'
33import { Router } from 'call'
44import { IRoute } from './interfaces/IRoute'
55
@@ -20,35 +20,46 @@ export const Utils = {
2020 * Build a complete route, with bound handler and attached preconditions
2121 */
2222 buildRoute ( app : FabrixApp , path : string , rawRoute : IRoute ) {
23- const route = Object . assign ( { } , rawRoute )
24- route . config = route . config || ( route . config = { } )
25- route . config . pre = route . config . pre || ( route . config . pre = [ ] )
23+ const orgRoute = Object . assign ( { } , rawRoute )
24+ orgRoute . config = orgRoute . config || ( orgRoute . config = { } )
25+ orgRoute . config . pre = orgRoute . config . pre || ( orgRoute . config . pre = [ ] )
2626
27- path = Utils . getPathFromRoute ( app , path , route )
28- Utils . getHandlerFromString ( app , route )
27+ if ( app . config . get ( 'router.debug' ) ) {
28+ orgRoute . _orgPath = path
29+ }
30+
31+ path = Utils . getPathFromRoute ( app , path , orgRoute )
32+
33+ if ( app . config . get ( 'router.debug' ) ) {
34+ orgRoute . _newPath = path
35+ }
2936
30- route . config . pre = route . config . pre
37+ Utils . getHandlerFromString ( app , orgRoute )
38+
39+ orgRoute . config . pre = orgRoute . config . pre
3140 . map ( pre => Utils . getHandlerFromPrerequisite ( app , pre ) )
3241 . filter ( handler => ! ! handler )
3342
34- const routeHandlers = Object . keys ( route ) . filter ( value => - 1 !== Utils . methods . indexOf ( value ) )
43+ const orgRouteHandlers = Object . keys ( orgRoute ) . filter ( value => - 1 !== Utils . methods . indexOf ( value ) )
3544
36- if ( ! routeHandlers . some ( v => Utils . methods . indexOf ( v ) >= 0 || ! ! route [ v ] ) ) {
37- app . log . error ( 'spool-router: route ' , path , ' handler [' , routeHandlers . join ( ', ' ) , ']' ,
45+ if ( ! orgRouteHandlers . some ( v => Utils . methods . indexOf ( v ) >= 0 || ! ! orgRoute [ v ] ) ) {
46+ app . log . error ( 'spool-orgRouter: orgRoute ' , path , ' handler [' , orgRouteHandlers . join ( ', ' ) , ']' ,
3847 'does not correspond to any defined Controller handler' )
3948 return { }
4049 }
4150
42- routeHandlers . forEach ( method => {
43- if ( route [ method ] ) {
44- route [ method ] . config = route [ method ] . config || route . config
45- route [ method ] . config . pre = route [ method ] . config . pre || route . config . pre
46- route [ method ] . config . pre = route [ method ] . config . pre
51+ orgRouteHandlers . forEach ( method => {
52+ if ( orgRoute [ method ] ) {
53+ orgRoute [ method ] . config = orgRoute [ method ] . config || orgRoute . config
54+ orgRoute [ method ] . config . pre = orgRoute [ method ] . config . pre || orgRoute . config . pre
55+ orgRoute [ method ] . config . pre = orgRoute [ method ] . config . pre
4756 . map ( pre => Utils . getHandlerFromPrerequisite ( app , pre ) )
4857 . filter ( handler => ! ! handler )
4958 }
5059 } )
5160
61+ const route = omit ( orgRoute , 'config' )
62+
5263 return { path, route }
5364 } ,
5465
@@ -180,10 +191,10 @@ export const Utils = {
180191 * Sort a route collection by object key
181192 */
182193 sortRoutes ( routes , order ) {
183- const toReturn = { }
194+ const toReturn = new Map
184195 const sorted = Object . keys ( routes ) . sort ( Utils . createSpecificityComparator ( { order : order } ) )
185196 sorted . forEach ( ( r , i ) => {
186- toReturn [ r ] = routes [ r ]
197+ toReturn . set ( r , routes [ r ] )
187198 } )
188199 return toReturn
189200 } ,
@@ -212,19 +223,19 @@ export const Utils = {
212223 || routeA === catchAllRoute
213224 ) {
214225 return asc ? 1 : - 1
215- // Also push index route down to end, but not past the default
216226 }
227+ // Also push index route down to end, but not past the default
217228 else if (
218229 routeB === defaultRoute
219230 || routeB === catchAllRoute
220231 ) {
221232 return asc ? - 1 : 1
222- // Also push index route down to end, but not past the default
223233 }
234+ // Also push index route down to end, but not past the default
224235 else if ( / ^ \/ $ / . test ( routeA ) && ( routeB !== defaultRoute && routeB !== catchAllRoute ) ) {
225236 return asc ? 1 : - 1
226- // Otherwise, sort based on either depth or free variable priority
227237 }
238+ // Otherwise, sort based on either depth or free variable priority
228239 else {
229240 const slicedA = routeA . split ( '/' ) // .normalize('/' + routeA + '/').split('/').join('/')
230241 const slicedB = routeB . split ( '/' ) // .normalize('/' + routeB + '/').split('/').join('/')
0 commit comments