@@ -5,12 +5,15 @@ import { splitPath, splitRoutingPath, getPattern } from '../../utils/url.ts'
5
5
6
6
type HandlerSet < T > = {
7
7
handler : T
8
- params : Record < string , string >
9
8
possibleKeys : string [ ]
10
9
score : number
11
10
name : string // For debug
12
11
}
13
12
13
+ type HandlerParamsSet < T > = HandlerSet < T > & {
14
+ params : Record < string , string >
15
+ }
16
+
14
17
export class Node < T > {
15
18
methods : Record < string , HandlerSet < T > > [ ]
16
19
@@ -26,7 +29,7 @@ export class Node<T> {
26
29
this . name = ''
27
30
if ( method && handler ) {
28
31
const m : Record < string , HandlerSet < T > > = { }
29
- m [ method ] = { handler, params : { } , possibleKeys : [ ] , score : 0 , name : this . name }
32
+ m [ method ] = { handler, possibleKeys : [ ] , score : 0 , name : this . name }
30
33
this . methods = [ m ]
31
34
}
32
35
this . patterns = [ ]
@@ -74,7 +77,6 @@ export class Node<T> {
74
77
75
78
const handlerSet : HandlerSet < T > = {
76
79
handler,
77
- params : { } ,
78
80
possibleKeys,
79
81
name : this . name ,
80
82
score : this . order ,
@@ -87,12 +89,17 @@ export class Node<T> {
87
89
}
88
90
89
91
// getHandlerSets
90
- private gHSets ( node : Node < T > , method : string , params : Record < string , string > ) : HandlerSet < T > [ ] {
91
- const handlerSets : HandlerSet < T > [ ] = [ ]
92
+ private gHSets (
93
+ node : Node < T > ,
94
+ method : string ,
95
+ params : Record < string , string >
96
+ ) : HandlerParamsSet < T > [ ] {
97
+ const handlerSets : HandlerParamsSet < T > [ ] = [ ]
92
98
for ( let i = 0 , len = node . methods . length ; i < len ; i ++ ) {
93
99
const m = node . methods [ i ]
94
- const handlerSet = m [ method ] || m [ METHOD_NAME_ALL ]
100
+ const handlerSet = ( m [ method ] || m [ METHOD_NAME_ALL ] ) as HandlerParamsSet < T >
95
101
if ( handlerSet !== undefined ) {
102
+ handlerSet . params = { }
96
103
handlerSet . possibleKeys . map ( ( key ) => {
97
104
handlerSet . params [ key ] = params [ key ]
98
105
} )
@@ -103,7 +110,7 @@ export class Node<T> {
103
110
}
104
111
105
112
search ( method : string , path : string ) : [ [ T , Params ] [ ] ] {
106
- const handlerSets : HandlerSet < T > [ ] = [ ]
113
+ const handlerSets : HandlerParamsSet < T > [ ] = [ ]
107
114
108
115
const params : Record < string , string > = { }
109
116
this . params = { }
@@ -126,11 +133,9 @@ export class Node<T> {
126
133
if ( isLast === true ) {
127
134
// '/hello/*' => match '/hello'
128
135
if ( nextNode . children [ '*' ] ) {
129
- handlerSets . push (
130
- ...this . gHSets ( nextNode . children [ '*' ] , method , { ...params , ...node . params } )
131
- )
136
+ handlerSets . push ( ...this . gHSets ( nextNode . children [ '*' ] , method , node . params ) )
132
137
}
133
- handlerSets . push ( ...this . gHSets ( nextNode , method , { ... params , ... node . params } ) )
138
+ handlerSets . push ( ...this . gHSets ( nextNode , method , node . params ) )
134
139
} else {
135
140
tempNodes . push ( nextNode )
136
141
}
@@ -144,7 +149,7 @@ export class Node<T> {
144
149
if ( pattern === '*' ) {
145
150
const astNode = node . children [ '*' ]
146
151
if ( astNode ) {
147
- handlerSets . push ( ...this . gHSets ( astNode , method , { ... params , ... node . params } ) )
152
+ handlerSets . push ( ...this . gHSets ( astNode , method , node . params ) )
148
153
tempNodes . push ( astNode )
149
154
}
150
155
continue
0 commit comments