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