'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);

/**
 * 提取链接参数，兼容hash模式和history模式，以及拼接异常情况
 * @param {string} [url=''] 地址
 * @param {string} [key=''] 可选，若不为空，则提取返回该key对应的参数值
 * @returns 地址参数对象，或者是指定参数值
 * @example
 * // 地址使用 search 参数
 * resolveUrlParams('https://igame.qq.com?name=mike&age=18');
 * // => { name: 'mike', age: '18' }
 * @example
 * // 地址使用 hash 参数
 * resolveUrlParams('https://igame.qq.com#/?from=china&home=china');
 * // => { from: 'china', home: 'china' }
 * @example
 * // 地址同时使用 search 和 hash 参数
 * resolveUrlParams('https://igame.qq.com?name=mike&age=18#/index?from=china&home=china');
 * // => { from: 'china', home: 'china', name: 'mike', age: '18' }
 * @example
 * // 通过 key 直接取值
 * resolveUrlParams('https://igame.qq.com?name=mike&age=18', 'age');
 * // => '18'
 * @example
 * // 空 url 时：未传 key 返回 {}，传 key 返回 undefined
 * resolveUrlParams('');         // => {}
 * resolveUrlParams('', 'age');  // => undefined
 * @example
 * // 兼容真实业务地址中带 %3F、&amp; 等异常拼接情况
 * resolveUrlParams('https://igame.qq.com/x.html#/index?brandid=b1662364289&amp%3BmultiCfgId=b16623642891663309541');
 * // => { brandid: 'b1662364289' }
 */
function resolveUrlParams() {
  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  if (!url) return key ? undefined : {};
  // 解码
  var link = url;
  // 提取从第一个问号开始后的字符串内容（含问号）
  link = link.substring(url.indexOf('?'));
  // 正则匹配方式提取键值对
  // eslint-disable-next-line no-useless-escape
  var matchList = link.match(/(\?|&)([^\?&]*=[^\?&#]*)/g);
  if (!matchList) {
    return key ? undefined : {};
  }
  // 提取多个键值对
  var params = {};
  var kvList = matchList.map(function (item) {
    return item.replace(/(\?|&)/g, '');
  }); // 移除 ? 或 & 前缀
  kvList.forEach(function (kv) {
    var _kv$split = kv.split('='),
      _kv$split2 = _slicedToArray__default["default"](_kv$split, 2),
      key = _kv$split2[0],
      value = _kv$split2[1];
    if (value) {
      // 有值时，才记录
      params[key] = value;
    }
  });
  return key ? params[key] : params;
}

exports.resolveUrlParams = resolveUrlParams;
