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.
		
		
		
		
		
			
		
			
				
					
					
						
							174 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							174 lines
						
					
					
						
							3.4 KiB
						
					
					
				"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;
 | 
						|
 |