Source: utils/url.js

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
    
    
    
    
    
  
  
    
), relative); } else { return source.replace(new RegExp(`${sUrl.file}.* Tiny.js
, 'i'), '') + relative; } } } export { /** * parse-uri v1.0.0 * @see {@link https://github.com/Kikobeats/parse-uri} * * @memberof Tiny.url */ parse, };
Documentation generated by JSDoc 3.4.3 on Fri Jul 09 2021 19:32:25 GMT+0800 (CST)