47 lines
1.1 KiB
JavaScript
47 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,
|
|
};
|