Skip to content

Commit 072adfe

Browse files
dayninMylesBorins
authored andcommitted
url: replace "magic" numbers by constants
PR-URL: #19035 Reviewed-By: Myles Borins <[email protected]> Reviewed-By: Daijiro Wachi <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Khaidi Chu <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Anatoli Papirovski <[email protected]>
1 parent 528798c commit 072adfe

File tree

2 files changed

+123
-54
lines changed

2 files changed

+123
-54
lines changed

‎lib/internal/constants.js‎

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,39 @@ module.exports ={
88
CHAR_LOWERCASE_Z: 122,/*z*/
99

1010
// Non-alphabetic chars.
11-
CHAR_DOT: 46,/*.*/
12-
CHAR_FORWARD_SLASH: 47,/*/*/
13-
CHAR_BACKWARD_SLASH: 92,/*\*/
14-
CHAR_COLON: 58,/*:*/
15-
CHAR_QUESTION_MARK: 63,/*?*/
11+
CHAR_DOT: 46,/* . */
12+
CHAR_FORWARD_SLASH: 47,/* / */
13+
CHAR_BACKWARD_SLASH: 92,/* \ */
14+
CHAR_VERTICAL_LINE: 124,/* | */
15+
CHAR_COLON: 58,/* : */
16+
CHAR_QUESTION_MARK: 63,/* ? */
17+
CHAR_UNDERSCORE: 95,/* _ */
18+
CHAR_LINE_FEED: 10,/* \n */
19+
CHAR_CARRIAGE_RETURN: 13,/* \r */
20+
CHAR_TAB: 9,/* \t */
21+
CHAR_FORM_FEED: 12,/* \f */
22+
CHAR_EXCLAMATION_MARK: 33,/* ! */
23+
CHAR_HASH: 35,/* # */
24+
CHAR_SPACE: 32,/* */
25+
CHAR_NO_BREAK_SPACE: 160,/* \u00A0 */
26+
CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,/* \uFEFF */
27+
CHAR_LEFT_SQUARE_BRACKET: 91,/* [ */
28+
CHAR_RIGHT_SQUARE_BRACKET: 93,/* ] */
29+
CHAR_LEFT_ANGLE_BRACKET: 60,/* < */
30+
CHAR_RIGHT_ANGLE_BRACKET: 62,/* > */
31+
CHAR_LEFT_CURLY_BRACKET: 123,/*{*/
32+
CHAR_RIGHT_CURLY_BRACKET: 125,/*} */
33+
CHAR_HYPHEN_MINUS: 45,/* - */
34+
CHAR_PLUS: 43,/* + */
35+
CHAR_DOUBLE_QUOTE: 34,/* " */
36+
CHAR_SINGLE_QUOTE: 39,/* ' */
37+
CHAR_PERCENT: 37,/* % */
38+
CHAR_SEMICOLON: 59,/* ; */
39+
CHAR_CIRCUMFLEX_ACCENT: 94,/* ^ */
40+
CHAR_GRAVE_ACCENT: 96,/* ` */
41+
CHAR_AT: 64,/* @ */
42+
43+
// Digits
44+
CHAR_0: 48,/* 0 */
45+
CHAR_9: 57,/* 9 */
1646
};

‎lib/url.js‎

Lines changed: 88 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,43 @@ const slashedProtocol ={
9292
'file:': true
9393
};
9494
constquerystring=require('querystring');
95+
const{
96+
CHAR_SPACE,
97+
CHAR_TAB,
98+
CHAR_CARRIAGE_RETURN,
99+
CHAR_LINE_FEED,
100+
CHAR_FORM_FEED,
101+
CHAR_NO_BREAK_SPACE,
102+
CHAR_ZERO_WIDTH_NOBREAK_SPACE,
103+
CHAR_HASH,
104+
CHAR_FORWARD_SLASH,
105+
CHAR_LEFT_SQUARE_BRACKET,
106+
CHAR_RIGHT_SQUARE_BRACKET,
107+
CHAR_LEFT_ANGLE_BRACKET,
108+
CHAR_RIGHT_ANGLE_BRACKET,
109+
CHAR_LEFT_CURLY_BRACKET,
110+
CHAR_RIGHT_CURLY_BRACKET,
111+
CHAR_QUESTION_MARK,
112+
CHAR_LOWERCASE_A,
113+
CHAR_LOWERCASE_Z,
114+
CHAR_UPPERCASE_A,
115+
CHAR_UPPERCASE_Z,
116+
CHAR_DOT,
117+
CHAR_0,
118+
CHAR_9,
119+
CHAR_HYPHEN_MINUS,
120+
CHAR_PLUS,
121+
CHAR_UNDERSCORE,
122+
CHAR_DOUBLE_QUOTE,
123+
CHAR_SINGLE_QUOTE,
124+
CHAR_PERCENT,
125+
CHAR_SEMICOLON,
126+
CHAR_BACKWARD_SLASH,
127+
CHAR_CIRCUMFLEX_ACCENT,
128+
CHAR_GRAVE_ACCENT,
129+
CHAR_VERTICAL_LINE,
130+
CHAR_AT,
131+
}=require('internal/constants');
95132

96133
functionurlParse(url,parseQueryString,slashesDenoteHost){
97134
if(urlinstanceofUrl)returnurl;
@@ -119,13 +156,13 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
119156
constcode=url.charCodeAt(i);
120157

121158
// Find first and last non-whitespace characters for trimming
122-
constisWs=code===32/* */||
123-
code===9/*\t*/||
124-
code===13/*\r*/||
125-
code===10/*\n*/||
126-
code===12/*\f*/||
127-
code===160/*\u00A0*/||
128-
code===65279/*\uFEFF*/;
159+
constisWs=code===CHAR_SPACE||
160+
code===CHAR_TAB||
161+
code===CHAR_CARRIAGE_RETURN||
162+
code===CHAR_LINE_FEED||
163+
code===CHAR_FORM_FEED||
164+
code===CHAR_NO_BREAK_SPACE||
165+
code===CHAR_ZERO_WIDTH_NOBREAK_SPACE;
129166
if(start===-1){
130167
if(isWs)
131168
continue;
@@ -143,20 +180,20 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
143180
// Only convert backslashes while we haven't seen a split character
144181
if(!split){
145182
switch(code){
146-
case35: // '#'
183+
caseCHAR_HASH:
147184
hasHash=true;
148185
// Fall through
149-
case63: // '?'
186+
caseCHAR_QUESTION_MARK:
150187
split=true;
151188
break;
152-
case92: // '\\'
189+
caseCHAR_BACKWARD_SLASH:
153190
if(i-lastPos>0)
154191
rest+=url.slice(lastPos,i);
155192
rest+='/';
156193
lastPos=i+1;
157194
break;
158195
}
159-
}elseif(!hasHash&&code===35/*#*/){
196+
}elseif(!hasHash&&code===CHAR_HASH){
160197
hasHash=true;
161198
}
162199
}
@@ -218,8 +255,8 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
218255
// resolution will treat //foo/bar as host=foo,path=bar because that's
219256
// how the browser resolves relative URLs.
220257
if(slashesDenoteHost||proto||hostPattern.test(rest)){
221-
varslashes=rest.charCodeAt(0)===47/*/*/&&
222-
rest.charCodeAt(1)===47/*/*/;
258+
varslashes=rest.charCodeAt(0)===CHAR_FORWARD_SLASH&&
259+
rest.charCodeAt(1)===CHAR_FORWARD_SLASH;
223260
if(slashes&&!(proto&&hostlessProtocol[proto])){
224261
rest=rest.slice(2);
225262
this.slashes=true;
@@ -249,35 +286,35 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
249286
varnonHost=-1;
250287
for(i=0;i<rest.length;++i){
251288
switch(rest.charCodeAt(i)){
252-
case9: // '\t'
253-
case10: // '\n'
254-
case13: // '\r'
255-
case32: // ' '
256-
case34: // '"'
257-
case37: // '%'
258-
case39: // '\''
259-
case59: // ';'
260-
case60: // '<'
261-
case62: // '>'
262-
case92: // '\\'
263-
case94: // '^'
264-
case96: // '`'
265-
case123: // '{'
266-
case124: // '|'
267-
case125: // '}'
289+
caseCHAR_TAB:
290+
caseCHAR_LINE_FEED:
291+
caseCHAR_CARRIAGE_RETURN:
292+
caseCHAR_SPACE:
293+
caseCHAR_DOUBLE_QUOTE:
294+
caseCHAR_PERCENT:
295+
caseCHAR_SINGLE_QUOTE:
296+
caseCHAR_SEMICOLON:
297+
caseCHAR_LEFT_ANGLE_BRACKET:
298+
caseCHAR_RIGHT_ANGLE_BRACKET:
299+
caseCHAR_BACKWARD_SLASH:
300+
caseCHAR_CIRCUMFLEX_ACCENT:
301+
caseCHAR_GRAVE_ACCENT:
302+
caseCHAR_LEFT_CURLY_BRACKET:
303+
caseCHAR_VERTICAL_LINE:
304+
caseCHAR_RIGHT_CURLY_BRACKET:
268305
// Characters that are never ever allowed in a hostname from RFC 2396
269306
if(nonHost===-1)
270307
nonHost=i;
271308
break;
272-
case35: // '#'
273-
case47: // '/'
274-
case63: // '?'
309+
caseCHAR_HASH:
310+
caseCHAR_FORWARD_SLASH:
311+
caseCHAR_QUESTION_MARK:
275312
// Find the first instance of any host-ending characters
276313
if(nonHost===-1)
277314
nonHost=i;
278315
hostEnd=i;
279316
break;
280-
case64: // '@'
317+
caseCHAR_AT:
281318
// At this point, either we have an explicit point where the
282319
// auth portion cannot go past, or the last @ char is the decider.
283320
atSign=i;
@@ -312,8 +349,8 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
312349

313350
// if hostname begins with [ and ends with ]
314351
// assume that it's an IPv6 address.
315-
varipv6Hostname=hostname.charCodeAt(0)===91/*[*/&&
316-
hostname.charCodeAt(hostname.length-1)===93/*]*/;
352+
varipv6Hostname=hostname.charCodeAt(0)===CHAR_LEFT_SQUARE_BRACKET&&
353+
hostname.charCodeAt(hostname.length-1)===CHAR_RIGHT_SQUARE_BRACKET;
317354

318355
// validate a little.
319356
if(!ipv6Hostname){
@@ -367,11 +404,11 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
367404
varhashIdx=-1;
368405
for(i=0;i<rest.length;++i){
369406
constcode=rest.charCodeAt(i);
370-
if(code===35/*#*/){
407+
if(code===CHAR_HASH){
371408
this.hash=rest.slice(i);
372409
hashIdx=i;
373410
break;
374-
}elseif(code===63/*?*/&&questionIdx===-1){
411+
}elseif(code===CHAR_QUESTION_MARK&&questionIdx===-1){
375412
questionIdx=i;
376413
}
377414
}
@@ -422,13 +459,13 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost){
422459
functionvalidateHostname(self,rest,hostname){
423460
for(vari=0;i<hostname.length;++i){
424461
constcode=hostname.charCodeAt(i);
425-
constisValid=(code>=97/*a*/&&code<=122/*z*/)||
426-
code===46/*.*/||
427-
(code>=65/*A*/&&code<=90/*Z*/)||
428-
(code>=48/*0*/&&code<=57/*9*/)||
429-
code===45/*-*/||
430-
code===43/*+*/||
431-
code===95/*_*/||
462+
constisValid=(code>=CHAR_LOWERCASE_A&&code<=CHAR_LOWERCASE_Z)||
463+
code===CHAR_DOT||
464+
(code>=CHAR_UPPERCASE_A&&code<=CHAR_UPPERCASE_Z)||
465+
(code>=CHAR_0&&code<=CHAR_9)||
466+
code===CHAR_HYPHEN_MINUS||
467+
code===CHAR_PLUS||
468+
code===CHAR_UNDERSCORE||
432469
code>127;
433470

434471
// Invalid host character
@@ -542,13 +579,13 @@ Url.prototype.format = function format(){
542579
varlastPos=0;
543580
for(vari=0;i<pathname.length;++i){
544581
switch(pathname.charCodeAt(i)){
545-
case35: // '#'
582+
caseCHAR_HASH:
546583
if(i-lastPos>0)
547584
newPathname+=pathname.slice(lastPos,i);
548585
newPathname+='%23';
549586
lastPos=i+1;
550587
break;
551-
case63: // '?'
588+
caseCHAR_QUESTION_MARK:
552589
if(i-lastPos>0)
553590
newPathname+=pathname.slice(lastPos,i);
554591
newPathname+='%3F';
@@ -567,7 +604,7 @@ Url.prototype.format = function format(){
567604
// unless they had them to begin with.
568605
if(this.slashes||slashedProtocol[protocol]){
569606
if(this.slashes||host){
570-
if(pathname&&pathname.charCodeAt(0)!==47/*/*/)
607+
if(pathname&&pathname.charCodeAt(0)!==CHAR_FORWARD_SLASH)
571608
pathname='/'+pathname;
572609
host='//'+host;
573610
}elseif(protocol.length>=4&&
@@ -581,8 +618,10 @@ Url.prototype.format = function format(){
581618

582619
search=search.replace(/#/g,'%23');
583620

584-
if(hash&&hash.charCodeAt(0)!==35/*#*/)hash='#'+hash;
585-
if(search&&search.charCodeAt(0)!==63/*?*/)search='?'+search;
621+
if(hash&&hash.charCodeAt(0)!==CHAR_HASH)
622+
hash='#'+hash;
623+
if(search&&search.charCodeAt(0)!==CHAR_QUESTION_MARK)
624+
search='?'+search;
586625

587626
returnprotocol+host+pathname+search+hash;
588627
};

0 commit comments

Comments
(0)