59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var hrefInfo   = require("./hrefInfo");
 | 
						|
var parseHost  = require("./host");
 | 
						|
var parsePath  = require("./path");
 | 
						|
var parsePort  = require("./port");
 | 
						|
var parseQuery = require("./query");
 | 
						|
var parseUrlString = require("./urlstring");
 | 
						|
var pathUtils      = require("../util/path");
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function parseFromUrl(url, options, fallback)
 | 
						|
{
 | 
						|
	if (url)
 | 
						|
	{
 | 
						|
		var urlObj = parseUrl(url, options);
 | 
						|
		
 | 
						|
		// Because the following occurs in the relate stage for "to" URLs,
 | 
						|
		// such had to be mostly duplicated here
 | 
						|
		
 | 
						|
		var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
 | 
						|
		
 | 
						|
		urlObj.path.absolute.array  = pathArray;
 | 
						|
		urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
 | 
						|
		
 | 
						|
		return urlObj;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		return fallback;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function parseUrl(url, options)
 | 
						|
{
 | 
						|
	var urlObj = parseUrlString(url, options);
 | 
						|
	
 | 
						|
	if (urlObj.valid===false) return urlObj;
 | 
						|
	
 | 
						|
	parseHost(urlObj, options);
 | 
						|
	parsePort(urlObj, options);
 | 
						|
	parsePath(urlObj, options);
 | 
						|
	parseQuery(urlObj, options);
 | 
						|
	hrefInfo(urlObj);
 | 
						|
	
 | 
						|
	return urlObj;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
module.exports =
 | 
						|
{
 | 
						|
	from: parseFromUrl,
 | 
						|
	to:   parseUrl
 | 
						|
};
 |