| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- "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;
 
 
  |