| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | 
							- "use strict";
 
- var constants = require("./constants");
 
- function formatAuth(urlObj, options)
 
- {
 
- 	if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE))
 
- 	{
 
- 		return urlObj.auth + "@";
 
- 	}
 
- 	
 
- 	return "";
 
- }
 
- function formatHash(urlObj, options)
 
- {
 
- 	return urlObj.hash ? urlObj.hash : "";
 
- }
 
- function formatHost(urlObj, options)
 
- {
 
- 	if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output===constants.ABSOLUTE))
 
- 	{
 
- 		return urlObj.host.full;
 
- 	}
 
- 	
 
- 	return "";
 
- }
 
- function formatPath(urlObj, options)
 
- {
 
- 	var str = "";
 
- 	
 
- 	var absolutePath = urlObj.path.absolute.string;
 
- 	var relativePath = urlObj.path.relative.string;
 
- 	var resource = showResource(urlObj, options);
 
- 	
 
- 	if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE)
 
- 	{
 
- 		str = absolutePath;
 
- 	}
 
- 	else if (relativePath.length<=absolutePath.length && options.output===constants.SHORTEST || options.output===constants.PATH_RELATIVE)
 
- 	{
 
- 		str = relativePath;
 
- 		
 
- 		if (str === "")
 
- 		{
 
- 			var query = showQuery(urlObj,options) && !!getQuery(urlObj,options);
 
- 			
 
- 			if (urlObj.extra.relation.maximumPath && !resource)
 
- 			{
 
- 				str = "./";
 
- 			}
 
- 			else if (urlObj.extra.relation.overridesQuery && !resource && !query)
 
- 			{
 
- 				str = "./";
 
- 			}
 
- 		}
 
- 	}
 
- 	else
 
- 	{
 
- 		str = absolutePath;
 
- 	}
 
- 	
 
- 	if ( str==="/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output===constants.ABSOLUTE) )
 
- 	{
 
- 		str = "";
 
- 	}
 
- 	
 
- 	return str;
 
- }
 
- function formatPort(urlObj, options)
 
- {
 
- 	if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost)
 
- 	{
 
- 		return ":" + urlObj.port;
 
- 	}
 
- 	
 
- 	return "";
 
- }
 
- function formatQuery(urlObj, options)
 
- {
 
- 	return showQuery(urlObj,options) ? getQuery(urlObj, options) : "";
 
- }
 
- function formatResource(urlObj, options)
 
- {
 
- 	return showResource(urlObj,options) ? urlObj.resource : "";
 
- }
 
- function formatScheme(urlObj, options)
 
- {
 
- 	var str = "";
 
- 	
 
- 	if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE)
 
- 	{
 
- 		if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output===constants.ABSOLUTE)
 
- 		{
 
- 			str += urlObj.scheme + "://";
 
- 		}
 
- 		else
 
- 		{
 
- 			str += "//";
 
- 		}
 
- 	}
 
- 	
 
- 	return str;
 
- }
 
- function formatUrl(urlObj, options)
 
- {
 
- 	var url = "";
 
- 	
 
- 	url += formatScheme(urlObj, options);
 
- 	url += formatAuth(urlObj, options);
 
- 	url += formatHost(urlObj, options);
 
- 	url += formatPort(urlObj, options);
 
- 	url += formatPath(urlObj, options);
 
- 	url += formatResource(urlObj, options);
 
- 	url += formatQuery(urlObj, options);
 
- 	url += formatHash(urlObj, options);
 
- 	
 
- 	return url;
 
- }
 
- function getQuery(urlObj, options)
 
- {
 
- 	var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
 
- 	
 
- 	return urlObj.query.string[ stripQuery ? "stripped" : "full" ];
 
- }
 
- function showQuery(urlObj, options)
 
- {
 
- 	return !urlObj.extra.relation.minimumQuery || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE;
 
- }
 
- function showResource(urlObj, options)
 
- {
 
- 	var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex;
 
- 	var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output!==constants.ABSOLUTE && options.output!==constants.ROOT_RELATIVE;
 
- 	
 
- 	return !!urlObj.resource && !removeMatchingResource && !removeIndex;
 
- }
 
- module.exports = formatUrl;
 
 
  |