@@ -94,6 +94,43 @@ const slashedProtocol = {
9494  'file:' : true 
9595} ; 
9696const  querystring  =  require ( 'querystring' ) ; 
97+ const  { 
98+   CHAR_SPACE , 
99+   CHAR_TAB , 
100+   CHAR_CARRIAGE_RETURN , 
101+   CHAR_LINE_FEED , 
102+   CHAR_FORM_FEED , 
103+   CHAR_NO_BREAK_SPACE , 
104+   CHAR_ZERO_WIDTH_NOBREAK_SPACE , 
105+   CHAR_HASH , 
106+   CHAR_FORWARD_SLASH , 
107+   CHAR_LEFT_SQUARE_BRACKET , 
108+   CHAR_RIGHT_SQUARE_BRACKET , 
109+   CHAR_LEFT_ANGLE_BRACKET , 
110+   CHAR_RIGHT_ANGLE_BRACKET , 
111+   CHAR_LEFT_CURLY_BRACKET , 
112+   CHAR_RIGHT_CURLY_BRACKET , 
113+   CHAR_QUESTION_MARK , 
114+   CHAR_LOWERCASE_A , 
115+   CHAR_LOWERCASE_Z , 
116+   CHAR_UPPERCASE_A , 
117+   CHAR_UPPERCASE_Z , 
118+   CHAR_DOT , 
119+   CHAR_0 , 
120+   CHAR_9 , 
121+   CHAR_HYPHEN_MINUS , 
122+   CHAR_PLUS , 
123+   CHAR_UNDERSCORE , 
124+   CHAR_DOUBLE_QUOTE , 
125+   CHAR_SINGLE_QUOTE , 
126+   CHAR_PERCENT , 
127+   CHAR_SEMICOLON , 
128+   CHAR_BACKWARD_SLASH , 
129+   CHAR_CIRCUMFLEX_ACCENT , 
130+   CHAR_GRAVE_ACCENT , 
131+   CHAR_VERTICAL_LINE , 
132+   CHAR_AT , 
133+ }  =  require ( 'internal/constants' ) ; 
97134
98135function  urlParse ( url ,  parseQueryString ,  slashesDenoteHost )  { 
99136  if  ( url  instanceof  Url )  return  url ; 
@@ -121,13 +158,13 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
121158    const  code  =  url . charCodeAt ( i ) ; 
122159
123160    // Find first and last non-whitespace characters for trimming 
124-     const  isWs  =  code  ===  32 /* */  || 
125-                  code  ===  9 /*\t*/  || 
126-                  code  ===  13 /*\r*/  || 
127-                  code  ===  10 /*\n*/  || 
128-                  code  ===  12 /*\f*/  || 
129-                  code  ===  160 /*\u00A0*/  || 
130-                  code  ===  65279 /*\uFEFF*/ ; 
161+     const  isWs  =  code  ===  CHAR_SPACE  || 
162+                  code  ===  CHAR_TAB  || 
163+                  code  ===  CHAR_CARRIAGE_RETURN  || 
164+                  code  ===  CHAR_LINE_FEED  || 
165+                  code  ===  CHAR_FORM_FEED  || 
166+                  code  ===  CHAR_NO_BREAK_SPACE  || 
167+                  code  ===  CHAR_ZERO_WIDTH_NOBREAK_SPACE ; 
131168    if  ( start  ===  - 1 )  { 
132169      if  ( isWs ) 
133170        continue ; 
@@ -145,20 +182,20 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
145182    // Only convert backslashes while we haven't seen a split character 
146183    if  ( ! split )  { 
147184      switch  ( code )  { 
148-         case  35 :  // '#' 
185+         case  CHAR_HASH : 
149186          hasHash  =  true ; 
150187        // Fall through 
151-         case  63 :  // '?' 
188+         case  CHAR_QUESTION_MARK : 
152189          split  =  true ; 
153190          break ; 
154-         case  92 :  // '\\' 
191+         case  CHAR_BACKWARD_SLASH : 
155192          if  ( i  -  lastPos  >  0 ) 
156193            rest  +=  url . slice ( lastPos ,  i ) ; 
157194          rest  +=  '/' ; 
158195          lastPos  =  i  +  1 ; 
159196          break ; 
160197      } 
161-     }  else  if  ( ! hasHash  &&  code  ===  35 /*#*/ )  { 
198+     }  else  if  ( ! hasHash  &&  code  ===  CHAR_HASH )  { 
162199      hasHash  =  true ; 
163200    } 
164201  } 
@@ -220,8 +257,8 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
220257  // resolution will treat //foo/bar as host=foo,path=bar because that's 
221258  // how the browser resolves relative URLs. 
222259  if  ( slashesDenoteHost  ||  proto  ||  hostPattern . test ( rest ) )  { 
223-     var  slashes  =  rest . charCodeAt ( 0 )  ===  47 /*/*/  && 
224-                   rest . charCodeAt ( 1 )  ===  47 /*/*/ ; 
260+     var  slashes  =  rest . charCodeAt ( 0 )  ===  CHAR_FORWARD_SLASH  && 
261+                   rest . charCodeAt ( 1 )  ===  CHAR_FORWARD_SLASH ; 
225262    if  ( slashes  &&  ! ( proto  &&  hostlessProtocol [ proto ] ) )  { 
226263      rest  =  rest . slice ( 2 ) ; 
227264      this . slashes  =  true ; 
@@ -251,35 +288,35 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
251288    var  nonHost  =  - 1 ; 
252289    for  ( i  =  0 ;  i  <  rest . length ;  ++ i )  { 
253290      switch  ( rest . charCodeAt ( i ) )  { 
254-         case  9 :    // '\t' 
255-         case  10 :   // '\n' 
256-         case  13 :   // '\r' 
257-         case  32 :   // ' ' 
258-         case  34 :   // '"' 
259-         case  37 :   // '%' 
260-         case  39 :   // '\'' 
261-         case  59 :   // ';' 
262-         case  60 :   // '<' 
263-         case  62 :   // '>' 
264-         case  92 :   // '\\' 
265-         case  94 :   // '^' 
266-         case  96 :   // '`' 
267-         case  123 :  // '{' 
268-         case  124 :  // '|' 
269-         case  125 :  // '}' 
291+         case  CHAR_TAB : 
292+         case  CHAR_LINE_FEED : 
293+         case  CHAR_CARRIAGE_RETURN : 
294+         case  CHAR_SPACE : 
295+         case  CHAR_DOUBLE_QUOTE : 
296+         case  CHAR_PERCENT : 
297+         case  CHAR_SINGLE_QUOTE : 
298+         case  CHAR_SEMICOLON : 
299+         case  CHAR_LEFT_ANGLE_BRACKET : 
300+         case  CHAR_RIGHT_ANGLE_BRACKET : 
301+         case  CHAR_BACKWARD_SLASH : 
302+         case  CHAR_CIRCUMFLEX_ACCENT : 
303+         case  CHAR_GRAVE_ACCENT : 
304+         case  CHAR_LEFT_CURLY_BRACKET : 
305+         case  CHAR_VERTICAL_LINE : 
306+         case  CHAR_RIGHT_CURLY_BRACKET : 
270307          // Characters that are never ever allowed in a hostname from RFC 2396 
271308          if  ( nonHost  ===  - 1 ) 
272309            nonHost  =  i ; 
273310          break ; 
274-         case  35 :  // '#' 
275-         case  47 :  // '/' 
276-         case  63 :  // '?' 
311+         case  CHAR_HASH : 
312+         case  CHAR_FORWARD_SLASH : 
313+         case  CHAR_QUESTION_MARK : 
277314          // Find the first instance of any host-ending characters 
278315          if  ( nonHost  ===  - 1 ) 
279316            nonHost  =  i ; 
280317          hostEnd  =  i ; 
281318          break ; 
282-         case  64 :  // '@' 
319+         case  CHAR_AT : 
283320          // At this point, either we have an explicit point where the 
284321          // auth portion cannot go past, or the last @ char is the decider. 
285322          atSign  =  i ; 
@@ -314,8 +351,8 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
314351
315352    // if hostname begins with [ and ends with ] 
316353    // assume that it's an IPv6 address. 
317-     var  ipv6Hostname  =  hostname . charCodeAt ( 0 )  ===  91 /*[*/  && 
318-                         hostname . charCodeAt ( hostname . length  -  1 )  ===  93 /*]*/ ; 
354+     var  ipv6Hostname  =  hostname . charCodeAt ( 0 )  ===  CHAR_LEFT_SQUARE_BRACKET  && 
355+       hostname . charCodeAt ( hostname . length  -  1 )  ===  CHAR_RIGHT_SQUARE_BRACKET ; 
319356
320357    // validate a little. 
321358    if  ( ! ipv6Hostname )  { 
@@ -369,11 +406,11 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
369406  var  hashIdx  =  - 1 ; 
370407  for  ( i  =  0 ;  i  <  rest . length ;  ++ i )  { 
371408    const  code  =  rest . charCodeAt ( i ) ; 
372-     if  ( code  ===  35 /*#*/ )  { 
409+     if  ( code  ===  CHAR_HASH )  { 
373410      this . hash  =  rest . slice ( i ) ; 
374411      hashIdx  =  i ; 
375412      break ; 
376-     }  else  if  ( code  ===  63 /*?*/  &&  questionIdx  ===  - 1 )  { 
413+     }  else  if  ( code  ===  CHAR_QUESTION_MARK  &&  questionIdx  ===  - 1 )  { 
377414      questionIdx  =  i ; 
378415    } 
379416  } 
@@ -424,13 +461,13 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
424461function  validateHostname ( self ,  rest ,  hostname )  { 
425462  for  ( var  i  =  0 ;  i  <  hostname . length ;  ++ i )  { 
426463    const  code  =  hostname . charCodeAt ( i ) ; 
427-     const  isValid  =  ( code  >=  97 /*a*/  &&  code  <=  122 /*z*/ )  || 
428-                     code  ===  46 /*.*/  || 
429-                     ( code  >=  65 /*A*/  &&  code  <=  90 /*Z*/ )  || 
430-                     ( code  >=  48 /*0*/  &&  code  <=  57 /*9*/ )  || 
431-                     code  ===  45 /*-*/  || 
432-                     code  ===  43 /*+*/  || 
433-                     code  ===  95 /*_*/  || 
464+     const  isValid  =  ( code  >=  CHAR_LOWERCASE_A  &&  code  <=  CHAR_LOWERCASE_Z )  || 
465+                     code  ===  CHAR_DOT  || 
466+                     ( code  >=  CHAR_UPPERCASE_A  &&  code  <=  CHAR_UPPERCASE_Z )  || 
467+                     ( code  >=  CHAR_0  &&  code  <=  CHAR_9 )  || 
468+                     code  ===  CHAR_HYPHEN_MINUS  || 
469+                     code  ===  CHAR_PLUS  || 
470+                     code  ===  CHAR_UNDERSCORE  || 
434471                    code  >  127 ; 
435472
436473    // Invalid host character 
@@ -544,13 +581,13 @@ Url.prototype.format = function format() {
544581  var  lastPos  =  0 ; 
545582  for  ( var  i  =  0 ;  i  <  pathname . length ;  ++ i )  { 
546583    switch  ( pathname . charCodeAt ( i ) )  { 
547-       case  35 :  // '#' 
584+       case  CHAR_HASH : 
548585        if  ( i  -  lastPos  >  0 ) 
549586          newPathname  +=  pathname . slice ( lastPos ,  i ) ; 
550587        newPathname  +=  '%23' ; 
551588        lastPos  =  i  +  1 ; 
552589        break ; 
553-       case  63 :  // '?' 
590+       case  CHAR_QUESTION_MARK : 
554591        if  ( i  -  lastPos  >  0 ) 
555592          newPathname  +=  pathname . slice ( lastPos ,  i ) ; 
556593        newPathname  +=  '%3F' ; 
@@ -569,7 +606,7 @@ Url.prototype.format = function format() {
569606  // unless they had them to begin with. 
570607  if  ( this . slashes  ||  slashedProtocol [ protocol ] )  { 
571608    if  ( this . slashes  ||  host )  { 
572-       if  ( pathname  &&  pathname . charCodeAt ( 0 )  !==  47 /*/*/ ) 
609+       if  ( pathname  &&  pathname . charCodeAt ( 0 )  !==  CHAR_FORWARD_SLASH ) 
573610        pathname  =  '/'  +  pathname ; 
574611      host  =  '//'  +  host ; 
575612    }  else  if  ( protocol . length  >=  4  && 
@@ -583,8 +620,10 @@ Url.prototype.format = function format() {
583620
584621  search  =  search . replace ( / # / g,  '%23' ) ; 
585622
586-   if  ( hash  &&  hash . charCodeAt ( 0 )  !==  35 /*#*/ )  hash  =  '#'  +  hash ; 
587-   if  ( search  &&  search . charCodeAt ( 0 )  !==  63 /*?*/ )  search  =  '?'  +  search ; 
623+   if  ( hash  &&  hash . charCodeAt ( 0 )  !==  CHAR_HASH ) 
624+     hash  =  '#'  +  hash ; 
625+   if  ( search  &&  search . charCodeAt ( 0 )  !==  CHAR_QUESTION_MARK ) 
626+     search  =  '?'  +  search ; 
588627
589628  return  protocol  +  host  +  pathname  +  search  +  hash ; 
590629} ; 
0 commit comments