55var CONTROL = '(?:' + [
66 '\\|\\|' , '\\&\\&' , ';;' , '\\|\\&' , '\\<\\(' , '\\<\\<\\<' , '>>' , '>\\&' , '<\\&' , '[&;()|<>]'
77] . join ( '|' ) + ')' ;
8+ var controlRE = new RegExp ( '^' + CONTROL + '$' ) ;
89var META = '|&;()<> \\t' ;
910var BAREWORD = '(\\\\[\'"' + META + ']|[^\\s\'"' + META + '])+' ;
1011var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"' ;
1112var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'' ;
13+ var hash = / ^ # $ / ;
14+
15+ var SQ = "'" ;
16+ var DQ = '"' ;
17+ var DS = '$' ;
1218
1319var TOKEN = '' ;
20+ var mult = Math . pow ( 16 , 8 ) ;
1421for ( var i = 0 ; i < 4 ; i ++ ) {
15- TOKEN += ( Math . pow ( 16 , 8 ) * Math . random ( ) ) . toString ( 16 ) ;
22+ TOKEN += ( mult * Math . random ( ) ) . toString ( 16 ) ;
1623}
24+ var startsWithToken = new RegExp ( '^' + TOKEN ) ;
1725
1826function parseInternal ( s , env , opts ) {
1927 var chunker = new RegExp ( [
@@ -52,7 +60,7 @@ function parseInternal(s, env, opts) {
5260 if ( commented ) {
5361 return void undefined ;
5462 }
55- if ( RegExp ( '^' + CONTROL + '$' ) . test ( s ) ) {
63+ if ( controlRE . test ( s ) ) {
5664 return { op : s } ;
5765 }
5866
@@ -67,9 +75,6 @@ function parseInternal(s, env, opts) {
6775 // 4. quote context can switch mid-token if there is no whitespace
6876 // between the two quote contexts (e.g. all'one'"token" parses as
6977 // "allonetoken")
70- var SQ = "'" ;
71- var DQ = '"' ;
72- var DS = '$' ;
7378 var BS = opts . escape || '\\' ;
7479 var quote = false ;
7580 var esc = false ;
@@ -137,9 +142,9 @@ function parseInternal(s, env, opts) {
137142 }
138143 } else if ( c === DQ || c === SQ ) {
139144 quote = c ;
140- } else if ( RegExp ( '^' + CONTROL + '$' ) . test ( c ) ) {
145+ } else if ( controlRE . test ( c ) ) {
141146 return { op : s } ;
142- } else if ( ( / ^ # $ / ) . test ( c ) ) {
147+ } else if ( hash . test ( c ) ) {
143148 commented = true ;
144149 if ( out . length ) {
145150 return [ out , { comment : s . slice ( i + 1 ) + match . slice ( j + 1 ) . join ( ' ' ) } ] ;
@@ -160,10 +165,7 @@ function parseInternal(s, env, opts) {
160165
161166 return out ;
162167 } ) . reduce ( function ( prev , arg ) { // finalize parsed aruments
163- if ( arg === undefined ) {
164- return prev ;
165- }
166- return prev . concat ( arg ) ;
168+ return typeof arg === 'undefined' ? prev : prev . concat ( arg ) ;
167169 } , [ ] ) ;
168170}
169171
@@ -181,7 +183,7 @@ module.exports = function parse(s, env, opts) {
181183 return acc . concat ( xs [ 0 ] ) ;
182184 }
183185 return acc . concat ( xs . filter ( Boolean ) . map ( function ( x ) {
184- if ( RegExp ( '^' + TOKEN ) . test ( x ) ) {
186+ if ( startsWithToken . test ( x ) ) {
185187 return JSON . parse ( x . split ( TOKEN ) [ 1 ] ) ;
186188 }
187189 return x ;
0 commit comments