import parse from 'parse-uri';
/**
* 简单的 Node.js `url.resolve` 实现
*
* @param {string} source
* @param {string} relative
*
* @example
* Tiny.url.resolve('/one/two/three', 'four');
* //=> '/one/two/four'
* Tiny.url.resolve('http://example.com/', '/one');
* //=> 'http://example.com/one'
* Tiny.url.resolve('http://example.com/one', '/two');
* //=> 'http://example.com/two'
* Tiny.url.resolve('http://example.com/one/two', '/three');
* //=> 'http://example.com/three'
* Tiny.url.resolve('http://example.com/one/two', 'three');
* //=> 'http://example.com/one/three'
* Tiny.url.resolve('http://example.com/one/two', './three');
* //=> 'http://example.com/one/three'
* Tiny.url.resolve('http://example.com/one/two', '../three');
* //=> 'http://example.com/three'
*/
export function resolve(source, relative) {
const sUrl = parse(source, { strictMode: true });
const rUrl = parse(relative, { strictMode: true });
if (rUrl.protocol) {
return relative;
} else {
relative = relative.replace(/^(\.)\//, '');
if (/^\.{2}\//.test(relative)) {
relative = relative.replace(/^(\.){2}\//, '');
source = source.replace(/[^\/]*\/[^\/]*$/, ''); // eslint-disable-line
}
if (/^\/[^\/]*/.test(relative)) { // eslint-disable-line
return source.replace(new RegExp(`${sUrl.path}
Tiny.js