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