5
5
var CONTROL = '(?:' + [
6
6
'\\|\\|' , '\\&\\&' , ';;' , '\\|\\&' , '\\<\\(' , '\\<\\<\\<' , '>>' , '>\\&' , '<\\&' , '[&;()|<>]'
7
7
] . join ( '|' ) + ')' ;
8
+ var controlRE = new RegExp ( '^' + CONTROL + '$' ) ;
8
9
var META = '|&;()<> \\t' ;
9
10
var BAREWORD = '(\\\\[\'"' + META + ']|[^\\s\'"' + META + '])+' ;
10
11
var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"' ;
11
12
var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'' ;
13
+ var hash = / ^ # $ / ;
14
+
15
+ var SQ = "'" ;
16
+ var DQ = '"' ;
17
+ var DS = '$' ;
12
18
13
19
var TOKEN = '' ;
20
+ var mult = Math . pow ( 16 , 8 ) ;
14
21
for ( var i = 0 ; i < 4 ; i ++ ) {
15
- TOKEN += ( Math . pow ( 16 , 8 ) * Math . random ( ) ) . toString ( 16 ) ;
22
+ TOKEN += ( mult * Math . random ( ) ) . toString ( 16 ) ;
16
23
}
24
+ var startsWithToken = new RegExp ( '^' + TOKEN ) ;
17
25
18
26
function parseInternal ( s , env , opts ) {
19
27
var chunker = new RegExp ( [
@@ -52,7 +60,7 @@ function parseInternal(s, env, opts) {
52
60
if ( commented ) {
53
61
return void undefined ;
54
62
}
55
- if ( RegExp ( '^' + CONTROL + '$' ) . test ( s ) ) {
63
+ if ( controlRE . test ( s ) ) {
56
64
return { op : s } ;
57
65
}
58
66
@@ -67,9 +75,6 @@ function parseInternal(s, env, opts) {
67
75
// 4. quote context can switch mid-token if there is no whitespace
68
76
// between the two quote contexts (e.g. all'one'"token" parses as
69
77
// "allonetoken")
70
- var SQ = "'" ;
71
- var DQ = '"' ;
72
- var DS = '$' ;
73
78
var BS = opts . escape || '\\' ;
74
79
var quote = false ;
75
80
var esc = false ;
@@ -137,9 +142,9 @@ function parseInternal(s, env, opts) {
137
142
}
138
143
} else if ( c === DQ || c === SQ ) {
139
144
quote = c ;
140
- } else if ( RegExp ( '^' + CONTROL + '$' ) . test ( c ) ) {
145
+ } else if ( controlRE . test ( c ) ) {
141
146
return { op : s } ;
142
- } else if ( ( / ^ # $ / ) . test ( c ) ) {
147
+ } else if ( hash . test ( c ) ) {
143
148
commented = true ;
144
149
if ( out . length ) {
145
150
return [ out , { comment : s . slice ( i + 1 ) + match . slice ( j + 1 ) . join ( ' ' ) } ] ;
@@ -160,10 +165,7 @@ function parseInternal(s, env, opts) {
160
165
161
166
return out ;
162
167
} ) . 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 ) ;
167
169
} , [ ] ) ;
168
170
}
169
171
@@ -181,7 +183,7 @@ module.exports = function parse(s, env, opts) {
181
183
return acc . concat ( xs [ 0 ] ) ;
182
184
}
183
185
return acc . concat ( xs . filter ( Boolean ) . map ( function ( x ) {
184
- if ( RegExp ( '^' + TOKEN ) . test ( x ) ) {
186
+ if ( startsWithToken . test ( x ) ) {
185
187
return JSON . parse ( x . split ( TOKEN ) [ 1 ] ) ;
186
188
}
187
189
return x ;
0 commit comments