You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
2.3 KiB
146 lines
2.3 KiB
"use strict"; |
|
|
|
var _parseUrl = require("url").parse; |
|
|
|
|
|
|
|
/* |
|
Customize the URL object that Node generates |
|
because: |
|
|
|
* necessary data for later |
|
* urlObj.host is useless |
|
* urlObj.hostname is too long |
|
* urlObj.path is useless |
|
* urlObj.pathname is too long |
|
* urlObj.protocol is inaccurate; should be called "scheme" |
|
* urlObj.search is mostly useless |
|
*/ |
|
function clean(urlObj) |
|
{ |
|
var scheme = urlObj.protocol; |
|
|
|
if (scheme) |
|
{ |
|
// Remove ":" suffix |
|
if (scheme.indexOf(":") === scheme.length-1) |
|
{ |
|
scheme = scheme.substr(0, scheme.length-1); |
|
} |
|
} |
|
|
|
urlObj.host = |
|
{ |
|
// TODO :: unescape(encodeURIComponent(s)) ? ... http://ecmanaut.blogspot.ca/2006/07/encoding-decoding-utf8-in-javascript.html |
|
full: urlObj.hostname, |
|
stripped: null |
|
}; |
|
|
|
urlObj.path = |
|
{ |
|
absolute: |
|
{ |
|
array: null, |
|
string: urlObj.pathname |
|
}, |
|
relative: |
|
{ |
|
array: null, |
|
string: null |
|
} |
|
}; |
|
|
|
urlObj.query = |
|
{ |
|
object: urlObj.query, |
|
string: |
|
{ |
|
full: null, |
|
stripped: null |
|
} |
|
}; |
|
|
|
urlObj.extra = |
|
{ |
|
hrefInfo: |
|
{ |
|
minimumPathOnly: null, |
|
minimumResourceOnly: null, |
|
minimumQueryOnly: null, |
|
minimumHashOnly: null, |
|
empty: null, |
|
|
|
separatorOnlyQuery: urlObj.search==="?" |
|
}, |
|
portIsDefault: null, |
|
relation: |
|
{ |
|
maximumScheme: null, |
|
maximumAuth: null, |
|
maximumHost: null, |
|
maximumPort: null, |
|
maximumPath: null, |
|
maximumResource: null, |
|
maximumQuery: null, |
|
maximumHash: null, |
|
|
|
minimumScheme: null, |
|
minimumAuth: null, |
|
minimumHost: null, |
|
minimumPort: null, |
|
minimumPath: null, |
|
minimumResource: null, |
|
minimumQuery: null, |
|
minimumHash: null, |
|
|
|
overridesQuery: null |
|
}, |
|
resourceIsIndex: null, |
|
slashes: urlObj.slashes |
|
}; |
|
|
|
urlObj.resource = null; |
|
urlObj.scheme = scheme; |
|
delete urlObj.hostname; |
|
delete urlObj.pathname; |
|
delete urlObj.protocol; |
|
delete urlObj.search; |
|
delete urlObj.slashes; |
|
|
|
return urlObj; |
|
} |
|
|
|
|
|
|
|
function validScheme(url, options) |
|
{ |
|
var valid = true; |
|
|
|
options.rejectedSchemes.every( function(rejectedScheme) |
|
{ |
|
valid = !(url.indexOf(rejectedScheme+":") === 0); |
|
|
|
// Break loop |
|
return valid; |
|
}); |
|
|
|
return valid; |
|
} |
|
|
|
|
|
|
|
function parseUrlString(url, options) |
|
{ |
|
if ( validScheme(url,options) ) |
|
{ |
|
return clean( _parseUrl(url, true, options.slashesDenoteHost) ); |
|
} |
|
else |
|
{ |
|
return {href:url, valid:false}; |
|
} |
|
} |
|
|
|
|
|
|
|
module.exports = parseUrlString;
|
|
|