Skip to content

Commit

Permalink
Fix issue with domain containing tld in name (ex: www.testshi.cn).
Browse files Browse the repository at this point in the history
  • Loading branch information
websanova committed Aug 28, 2017
1 parent dc58f80 commit 322fce9
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -16,5 +16,5 @@
"type": "git",
"url": "https://github.com/websanova/node-url"
},
"version": "2.3.0"
"version": "2.5.1"
}
26 changes: 14 additions & 12 deletions test.js
Expand Up @@ -36,7 +36,7 @@ var url = 'http://rob:abcd1234@www.domain.com/path/index.html?query1=test&silly=
strictEqual( wurl('tld', 'http://sub.www.domain.co.uk'), 'co.uk' );
strictEqual( wurl('tld', 'http://www.domain.org.uk'), 'org.uk' );
strictEqual( wurl('tld', 'http://domain.la'), 'la' );
strictEqual( wurl('tld', 'http://in'), 'in' );
strictEqual( wurl('tld', 'http://in'), undefined );
strictEqual( wurl('tld', 'http://.asia'), 'asia' );
strictEqual( wurl('tld', 'http://.cao.uk'), undefined );
strictEqual( wurl('tld', 'http://'), undefined );
Expand All @@ -52,6 +52,7 @@ strictEqual( wurl('domain', 'http://.cao.uk'), undefined );
strictEqual( wurl('domain', 'http://'), undefined );
strictEqual( wurl('domain', 'http://domain.zoo'), undefined );
strictEqual( wurl('domain', url), 'domain.com' );
strictEqual( wurl('domain', 'https://test.testshi.cn/test.html' ), 'testshi.cn' );

strictEqual( wurl('sub', 'http://sub.www.domain.co.uk'), 'sub.www' );
strictEqual( wurl('sub', 'http://www.domain.org.uk'), 'www' );
Expand Down Expand Up @@ -103,25 +104,25 @@ strictEqual( wurl( 'protocol', 'mailto:rob@websanova.com' ), 'mailto' );

strictEqual( wurl( 'path', url ), '/path/index.html' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second/' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second/' ), '/first/second/' );
strictEqual( wurl( 'path', 'http://www.domain.com:8080/first/second' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com:8080/first/second/' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com:8080/first/second/' ), '/first/second/' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second?test=foo' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second/?test=foo' ), '/first/second' );
strictEqual( wurl( 'path', 'http://www.domain.com/first/second/?test=foo' ), '/first/second/' );
strictEqual( wurl( 'path', 'http://www.domain.com/path#anchor' ), '/path' );
strictEqual( wurl( 'path', 'http://www.domain.com/path/#anchor' ), '/path' );
strictEqual( wurl( 'path', 'http://www.domain.com/path/#anchor' ), '/path/' );
strictEqual( wurl( 'path', 'http://www.domain.com' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/' ), '/' );
strictEqual( wurl( 'path', 'http://www.domain.com#anchor' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/#anchor' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/#anchor' ), '/' );
strictEqual( wurl( 'path', 'http://www.domain.com?test=foo' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/?test=foo' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com/?test=foo' ), '/' );
strictEqual( wurl( 'path', 'http://www.domain.com:80' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/' ), '/' );
strictEqual( wurl( 'path', 'http://www.domain.com:80#anchor' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/#anchor' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/#anchor' ), '/' );
strictEqual( wurl( 'path', 'http://www.domain.com:80?test=foo' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/?test=foo' ), '' );
strictEqual( wurl( 'path', 'http://www.domain.com:80/?test=foo' ), '/' );

strictEqual( wurl( 'file', url ), 'index.html' );
strictEqual( wurl( 'filename', url ), 'index' );
Expand All @@ -138,7 +139,8 @@ strictEqual( wurl( '-1', url ), 'index.html' );
strictEqual( wurl( '1', 'http://www.domain.com/first/second' ), 'first' );
strictEqual( wurl( '1', 'http://www.domain.com/first/second/' ), 'first' );
strictEqual( wurl( '-1', 'http://www.domain.com/first/second?test=foo' ), 'second' );
strictEqual( wurl( '-1', 'http://www.domain.com/first/second/?test=foo' ), 'second' );
strictEqual( wurl( '-1', 'http://www.domain.com/first/second/?test=foo' ), '' );
strictEqual( wurl( '-2', 'http://www.domain.com/first/second/?test=foo' ), 'second' );

strictEqual( wurl( 'query', url ), 'query1=test&silly=willy' );
//strictEqual( wurl( '?', url ), {'query1': 'test', 'silly': 'willy'} );
Expand Down
4 changes: 2 additions & 2 deletions wurl.js
@@ -1,7 +1,7 @@
module.exports = function (arg, url) {

function _t() {
return new RegExp(/(.*?)\.?([^\.]*?)\.?(com|net|org|biz|ws|in|me|co\.uk|co|org\.uk|ltd\.uk|plc\.uk|me\.uk|edu|mil|br\.com|cn\.com|eu\.com|hu\.com|no\.com|qc\.com|sa\.com|se\.com|se\.net|us\.com|uy\.com|ac|co\.ac|gv\.ac|or\.ac|ac\.ac|af|am|as|at|ac\.at|co\.at|gv\.at|or\.at|asn\.au|com\.au|edu\.au|org\.au|net\.au|id\.au|be|ac\.be|adm\.br|adv\.br|am\.br|arq\.br|art\.br|bio\.br|cng\.br|cnt\.br|com\.br|ecn\.br|eng\.br|esp\.br|etc\.br|eti\.br|fm\.br|fot\.br|fst\.br|g12\.br|gov\.br|ind\.br|inf\.br|jor\.br|lel\.br|med\.br|mil\.br|net\.br|nom\.br|ntr\.br|odo\.br|org\.br|ppg\.br|pro\.br|psc\.br|psi\.br|rec\.br|slg\.br|tmp\.br|tur\.br|tv\.br|vet\.br|zlg\.br|br|ab\.ca|bc\.ca|mb\.ca|nb\.ca|nf\.ca|ns\.ca|nt\.ca|on\.ca|pe\.ca|qc\.ca|sk\.ca|yk\.ca|ca|cc|ac\.cn|com\.cn|edu\.cn|gov\.cn|org\.cn|bj\.cn|sh\.cn|tj\.cn|cq\.cn|he\.cn|nm\.cn|ln\.cn|jl\.cn|hl\.cn|js\.cn|zj\.cn|ah\.cn|gd\.cn|gx\.cn|hi\.cn|sc\.cn|gz\.cn|yn\.cn|xz\.cn|sn\.cn|gs\.cn|qh\.cn|nx\.cn|xj\.cn|tw\.cn|hk\.cn|mo\.cn|cn|cx|cz|de|dk|fo|com\.ec|tm\.fr|com\.fr|asso\.fr|presse\.fr|fr|gf|gs|co\.il|net\.il|ac\.il|k12\.il|gov\.il|muni\.il|ac\.in|co\.in|org\.in|ernet\.in|gov\.in|net\.in|res\.in|is|it|ac\.jp|co\.jp|go\.jp|or\.jp|ne\.jp|ac\.kr|co\.kr|go\.kr|ne\.kr|nm\.kr|or\.kr|li|lt|lu|asso\.mc|tm\.mc|com\.mm|org\.mm|net\.mm|edu\.mm|gov\.mm|ms|nl|no|nu|pl|ro|org\.ro|store\.ro|tm\.ro|firm\.ro|www\.ro|arts\.ro|rec\.ro|info\.ro|nom\.ro|nt\.ro|se|si|com\.sg|org\.sg|net\.sg|gov\.sg|sk|st|tf|ac\.th|co\.th|go\.th|mi\.th|net\.th|or\.th|tm|to|com\.tr|edu\.tr|gov\.tr|k12\.tr|net\.tr|org\.tr|com\.tw|org\.tw|net\.tw|ac\.uk|uk\.com|uk\.net|gb\.com|gb\.net|vg|sh|kz|ch|info|ua|gov|name|pro|ie|hk|com\.hk|org\.hk|net\.hk|edu\.hk|us|tk|cd|by|ad|lv|eu\.lv|bz|es|jp|cl|ag|mobi|eu|co\.nz|org\.nz|net\.nz|maori\.nz|iwi\.nz|io|la|md|sc|sg|vc|tw|travel|my|se|tv|pt|com\.pt|edu\.pt|asia|fi|com\.ve|net\.ve|fi|org\.ve|web\.ve|info\.ve|co\.ve|tel|im|gr|ru|net\.ru|org\.ru|hr|com\.hr|ly|xyz)$/);
return new RegExp(/(.*?)\.?([^\.]*?)\.(com|net|org|biz|ws|in|me|co\.uk|co|org\.uk|ltd\.uk|plc\.uk|me\.uk|edu|mil|br\.com|cn\.com|eu\.com|hu\.com|no\.com|qc\.com|sa\.com|se\.com|se\.net|us\.com|uy\.com|ac|co\.ac|gv\.ac|or\.ac|ac\.ac|af|am|as|at|ac\.at|co\.at|gv\.at|or\.at|asn\.au|com\.au|edu\.au|org\.au|net\.au|id\.au|be|ac\.be|adm\.br|adv\.br|am\.br|arq\.br|art\.br|bio\.br|cng\.br|cnt\.br|com\.br|ecn\.br|eng\.br|esp\.br|etc\.br|eti\.br|fm\.br|fot\.br|fst\.br|g12\.br|gov\.br|ind\.br|inf\.br|jor\.br|lel\.br|med\.br|mil\.br|net\.br|nom\.br|ntr\.br|odo\.br|org\.br|ppg\.br|pro\.br|psc\.br|psi\.br|rec\.br|slg\.br|tmp\.br|tur\.br|tv\.br|vet\.br|zlg\.br|br|ab\.ca|bc\.ca|mb\.ca|nb\.ca|nf\.ca|ns\.ca|nt\.ca|on\.ca|pe\.ca|qc\.ca|sk\.ca|yk\.ca|ca|cc|ac\.cn|com\.cn|edu\.cn|gov\.cn|org\.cn|bj\.cn|sh\.cn|tj\.cn|cq\.cn|he\.cn|nm\.cn|ln\.cn|jl\.cn|hl\.cn|js\.cn|zj\.cn|ah\.cn|gd\.cn|gx\.cn|hi\.cn|sc\.cn|gz\.cn|yn\.cn|xz\.cn|sn\.cn|gs\.cn|qh\.cn|nx\.cn|xj\.cn|tw\.cn|hk\.cn|mo\.cn|cn|cx|cz|de|dk|fo|com\.ec|tm\.fr|com\.fr|asso\.fr|presse\.fr|fr|gf|gs|co\.il|net\.il|ac\.il|k12\.il|gov\.il|muni\.il|ac\.in|co\.in|org\.in|ernet\.in|gov\.in|net\.in|res\.in|is|it|ac\.jp|co\.jp|go\.jp|or\.jp|ne\.jp|ac\.kr|co\.kr|go\.kr|ne\.kr|nm\.kr|or\.kr|li|lt|lu|asso\.mc|tm\.mc|com\.mm|org\.mm|net\.mm|edu\.mm|gov\.mm|ms|nl|no|nu|pl|ro|org\.ro|store\.ro|tm\.ro|firm\.ro|www\.ro|arts\.ro|rec\.ro|info\.ro|nom\.ro|nt\.ro|se|si|com\.sg|org\.sg|net\.sg|gov\.sg|sk|st|tf|ac\.th|co\.th|go\.th|mi\.th|net\.th|or\.th|tm|to|com\.tr|edu\.tr|gov\.tr|k12\.tr|net\.tr|org\.tr|com\.tw|org\.tw|net\.tw|ac\.uk|uk\.com|uk\.net|gb\.com|gb\.net|vg|sh|kz|ch|info|ua|gov|name|pro|ie|hk|com\.hk|org\.hk|net\.hk|edu\.hk|us|tk|cd|by|ad|lv|eu\.lv|bz|es|jp|cl|ag|mobi|eu|co\.nz|org\.nz|net\.nz|maori\.nz|iwi\.nz|io|la|md|sc|sg|vc|tw|travel|my|se|tv|pt|com\.pt|edu\.pt|asia|fi|com\.ve|net\.ve|fi|org\.ve|web\.ve|info\.ve|co\.ve|tel|im|gr|ru|net\.ru|org\.ru|hr|com\.hr|ly|xyz)$/);
}

function _d(s) {
Expand Down Expand Up @@ -112,7 +112,7 @@ module.exports = function (arg, url) {
}

// Clean up path.
_l.path = (_l.path || '').replace(/^([^\/])/, '/$1').replace(/\/$/, '');
_l.path = (_l.path || '').replace(/^([^\/])/, '/$1');

// Return path parts.
if (arg.match(/^[\-0-9]+$/)) { arg = arg.replace(/^([^\/])/, '/$1'); }
Expand Down

0 comments on commit 322fce9

Please sign in to comment.