t-comm
Version: 
专业、稳定、纯粹的工具库
107 lines (103 loc) • 3.14 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
/**
 * 多重解码。避免内嵌在外部时地址参数被编码,先进行URL解码再进行HTML字符实体解码
 * @docgen
 * @function decode
 * @param {string} str 文本
 * @returns 解码后的文本
 */
function decode(str) {
  if (str === void 0) {
    str = '';
  }
  if (!str) return str;
  var text = decodeURIComponent(str);
  // 含有实体符号 &,需要实体解码处理
  var regex = /&/g;
  if (regex.test(text)) {
    text = text.replace(regex, '&');
  }
  return text;
}
/**
 * 将参数对象转成字符串
 * @docgen
 * @function stringifyParams
 * @param {Object} params 参数对象
 * @returns {String}
 */
function stringifyParams(params) {
  return Object.keys(params).reduce(function (acc, key) {
    var value = params[key];
    return "".concat(acc ? "".concat(acc, "&") : '').concat(key, "=").concat(value);
  }, '');
}
/**
 * 小程序不支持URL对象,用字符串拼接方式添加
 * 注意:已有相同key不支持覆盖,会重复添加
 * @docgen
 * @function addUrlParam
 * @param url 输入url
 * @param key 键
 * @param value 值
 */
function addUrlParam(url, key, value) {
  var ret = url;
  if (url.indexOf('?') !== -1) {
    ret = "".concat(ret, "&").concat(key, "=").concat(value);
  } else {
    ret = "".concat(ret, "?").concat(key, "=").concat(value);
  }
  return ret;
}
/**
 *  为url添加参数
 *
 * @export
 * @param {string} url
 * @param {object} params
 * @param {boolean} [shouldOverride=false]
 * @returns {string}
 */
function addUrlParams(url, params, shouldOverride) {
  if (shouldOverride === void 0) {
    shouldOverride = false;
  }
  // 使用正则表达式找到当前 URL 中的哈希部分
  var hashPart = url.match(/#.*/);
  var hash = hashPart ? hashPart[0] : '';
  // 从原始 URL 中删除哈希部分
  var mainUrl = url.replace(/#.*/, '');
  var _a = mainUrl.split('?'),
    baseUrl = _a[0],
    originalQueryString = _a[1];
  var originalParams = originalQueryString ? originalQueryString.split('&').reduce(function (acc, entry) {
    var _a = entry.split('='),
      key = _a[0],
      value = _a[1];
    acc[decodeURIComponent(key)] = decodeURIComponent(value);
    return acc;
  }, {}) : {};
  // 向原始参数对象添加新参数,同时判断是否覆盖现有参数值
  Object.entries(params).forEach(function (_a) {
    var key = _a[0],
      value = _a[1];
    if (shouldOverride || !Object.prototype.hasOwnProperty.call(originalParams, key)) {
      originalParams[key] = value;
    }
  });
  // 将原始参数和新参数合并为查询字符串
  var updatedQueryString = Object.entries(originalParams).map(function (_a) {
    var key = _a[0],
      value = _a[1];
    return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));
  }).join('&');
  // 拼接新的 URL
  var updatedUrl = "".concat(baseUrl, "?").concat(updatedQueryString).concat(hash);
  return updatedUrl;
}
exports.addUrlParam = addUrlParam;
exports.addUrlParams = addUrlParams;
exports.decode = decode;
exports.stringifyParams = stringifyParams;