@@ -62,21 +62,16 @@ export const reset = (): void => {
6262/**
6363 * @returns pattern with additional |
6464 */
65- export const connect_node_compile_to_regexp = < T > (
66- connectNode : ConnectNode < T > ,
67- earlyTerminate : boolean ,
68- ) : string => {
65+ export const connect_node_compile_to_regexp = ( connectNode : ConnectNode < unknown > ) : string => {
6966 if ( connectNode [ 0 ] !== null ) {
7067 HANDLERS . push ( connectNode [ 0 ] ) ;
71- return connectNode [ 1 ] === null
72- ? '()$|'
73- : `(?:()$|${ node_compile_to_regexp ( connectNode [ 1 ] , earlyTerminate ) } )|` ;
68+ return connectNode [ 1 ] === null ? '()$|' : `(?:()$|${ node_compile_to_regexp ( connectNode [ 1 ] ) } )|` ;
7469 }
7570
76- return node_compile_to_regexp ( connectNode [ 1 ] ! , earlyTerminate ) + '|' ;
71+ return node_compile_to_regexp ( connectNode [ 1 ] ! ) + '|' ;
7772} ;
7873
79- export const node_compile_to_regexp = < T > ( node : Node < T > , earlyTerminate : boolean ) : string => {
74+ export const node_compile_to_regexp = ( node : Node < unknown > ) : string => {
8075 let parts = '' ,
8176 partsCnt = 0 ;
8277
@@ -88,32 +83,12 @@ export const node_compile_to_regexp = <T>(node: Node<T>, earlyTerminate: boolean
8883 }
8984
9085 if ( node [ 2 ] !== null )
91- for (
92- let i = 0 ,
93- staticChildren = node [ 2 ] [ 1 ] ,
94- childCanEarlyTerminate =
95- earlyTerminate &&
96- // Ensure there's no fallback part available
97- node [ 3 ] === null &&
98- node [ 4 ] === null &&
99- node [ 5 ] === null &&
100- node [ 6 ] === null ;
101- i < staticChildren . length ;
102- i ++ , partsCnt ++
103- )
104- parts += node_compile_to_regexp ( staticChildren [ i ] , childCanEarlyTerminate ) + '|' ;
86+ for ( let i = 0 , staticChildren = node [ 2 ] [ 1 ] ; i < staticChildren . length ; i ++ , partsCnt ++ )
87+ parts += node_compile_to_regexp ( staticChildren [ i ] ) + '|' ;
10588
10689 if ( node [ 3 ] !== null ) {
10790 for (
108- let i = 0 ,
109- patterns = node [ 3 ] [ 0 ] ,
110- connectNodes = node [ 3 ] [ 1 ] ,
111- childCanEarlyTerminate =
112- earlyTerminate &&
113- // Ensure there's no fallback part available
114- node [ 4 ] === null &&
115- node [ 5 ] === null &&
116- node [ 6 ] === null ;
91+ let i = 0 , patterns = node [ 3 ] [ 0 ] , connectNodes = node [ 3 ] [ 1 ] ;
11792 i < connectNodes . length ;
11893 i ++ , partsCnt ++
11994 ) {
@@ -156,56 +131,38 @@ export const node_compile_to_regexp = <T>(node: Node<T>, earlyTerminate: boolean
156131 parts +=
157132 escapeStaticPart ( pattern . slice ( patternPrevIdx , patternLen ) ) +
158133 ( hasModifier ? ')' + modifier : '' ) +
159- connect_node_compile_to_regexp ( connectNodes [ i ] , childCanEarlyTerminate ) ;
134+ connect_node_compile_to_regexp ( connectNodes [ i ] ) ;
160135 }
161136 }
162137
163138 if ( node [ 4 ] !== null )
164139 for (
165- let i = 0 ,
166- regexps = node [ 4 ] [ 0 ] ,
167- connectNodes = node [ 4 ] [ 1 ] ,
168- childCanEarlyTerminate =
169- earlyTerminate &&
170- // Ensure there's no fallback part available
171- node [ 5 ] === null &&
172- node [ 6 ] === null ;
140+ let i = 0 , regexps = node [ 4 ] [ 0 ] , connectNodes = node [ 4 ] [ 1 ] ;
173141 i < regexps . length ;
174142 i ++ , partsCnt ++
175143 )
176- parts +=
177- '(?:' +
178- regexps [ i ] . slice ( 1 ) +
179- connect_node_compile_to_regexp ( connectNodes [ i ] , childCanEarlyTerminate ) ;
144+ parts += '(?:' + regexps [ i ] . slice ( 1 ) + connect_node_compile_to_regexp ( connectNodes [ i ] ) ;
180145
181146 if ( node [ 5 ] !== null )
182147 for (
183- let i = 0 ,
184- keys = node [ 5 ] [ 0 ] ,
185- connectNodes = node [ 5 ] [ 1 ] ,
186- childCanEarlyTerminate =
187- earlyTerminate &&
188- // Ensure there's no fallback part available
189- node [ 6 ] === null ;
148+ let i = 0 , keys = node [ 5 ] [ 0 ] , connectNodes = node [ 5 ] [ 1 ] ;
190149 i < keys . length ;
191150 i ++ , partsCnt ++
192151 ) {
193152 HANDLERS . push ( null ) ;
194153 parts +=
195154 parseNamedGroup ( keys [ i ] , 0 , keys [ i ] . length ) +
196- connect_node_compile_to_regexp ( connectNodes [ i ] , childCanEarlyTerminate ) ;
155+ connect_node_compile_to_regexp ( connectNodes [ i ] ) ;
197156 }
198157
199158 if ( node [ 6 ] !== null ) {
200159 partsCnt ++ ;
201- parts += '.*' + connect_node_compile_to_regexp ( node [ 6 ] , earlyTerminate ) ;
160+ parts += '.*' + connect_node_compile_to_regexp ( node [ 6 ] ) ;
202161 }
203162
204- parts = earlyTerminate
205- ? // early terminate the pattern by having an impossible pattern
206- '(?:' + parts + '$.)'
207- : partsCnt > 1
208- ? '(?:' + parts . slice ( 0 , - 1 ) + ')'
209- : parts . slice ( 0 , - 1 ) ;
163+ parts = partsCnt > 1 ? `(?:${ parts . slice ( 0 , - 1 ) } )` : parts . slice ( 0 , - 1 ) ;
210164 return node [ 0 ] . length > 0 ? escapeStaticPart ( node [ 0 ] ) + parts : parts ;
211165} ;
166+
167+ export const node_compile_root_to_regexp = ( root : Node < unknown > ) : string =>
168+ `^(?:${ node_compile_to_regexp ( root ) } |$.)` ;
0 commit comments