willow-utils
Version:
工具库
361 lines (273 loc) • 12.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.arrayAdd = arrayAdd;
exports.arrayEquals = arrayEquals;
exports.arrayRemove = arrayRemove;
exports.arrayToggle = arrayToggle;
exports.blurInput = blurInput;
exports.copyMsg = copyMsg;
exports.deepClone = deepClone;
exports.default = void 0;
exports.encodeRegExp = encodeRegExp;
exports.getValue = exports.getQueryString = exports.getCache = void 0;
exports.inAndroidBrowser = inAndroidBrowser;
exports.inBrowser = inBrowser;
exports.inDesktopBrowser = inDesktopBrowser;
exports.inIOSBrowser = inIOSBrowser;
exports.inMobileBrowser = inMobileBrowser;
exports.inWechat = inWechat;
exports.linkUtil = void 0;
exports.memoizeAll = memoizeAll;
exports.obj2query = obj2query;
exports.removeFromArray = removeFromArray;
exports.setValue = void 0;
exports.singleInstance = singleInstance;
var _cloneDeepWith = _interopRequireDefault(require("lodash/cloneDeepWith"));
var _result2 = _interopRequireDefault(require("lodash/result"));
var _set = _interopRequireDefault(require("lodash/set"));
var _forEach = _interopRequireDefault(require("lodash/forEach"));
var _throttle = _interopRequireDefault(require("lodash/throttle"));
var _memoize = _interopRequireDefault(require("lodash/memoize"));
var _urlUtil = require("./urlUtil");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
// object 转 URL query
function obj2query() {
var param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return Object.keys(param).reduce(function (str, key) {
str += (str ? '&' : '') + "".concat(key, "=").concat(encodeURIComponent(param[key]));
return str;
}, '');
} // 判断是否在浏览器中
function inBrowser() {
return typeof window != 'undefined';
} // 判断是否是移动端浏览器
var mobileKeyList = ['mobile', 'iphone', 'ipad', 'android'];
function inMobileBrowser() {
var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (inBrowser() && !ua) ua = navigator.userAgent;
if (!ua) return false;
return mobileKeyList.some(function (key) {
return ua.toLowerCase().includes(key);
});
} // 判断是否是桌面浏览器
function inDesktopBrowser() {
var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (!inBrowser()) return false;
return !inMobileBrowser(ua);
} // 判断是否在微信中
function inWechat() {
var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (inBrowser() && !ua) ua = navigator.userAgent;
return ua.toLowerCase().includes('micromessenger');
} // 判断是否是安卓
function inAndroidBrowser() {
var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (inBrowser() && !ua) ua = navigator.userAgent;
return ua.toLowerCase().includes('android');
}
var iosKeyList = ['iphone', 'ipad', 'ipod', 'mac']; // 判断是否是IOS
function inIOSBrowser() {
var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (inBrowser() && !ua) ua = navigator.userAgent;
ua = ua.toLowerCase();
return iosKeyList.some(function (key) {
return ua.includes(key.toLowerCase());
});
} // 复制内容
function copyMsg(msg) {
if (inBrowser()) {
var textArea = document.createElement('textarea');
textArea.readOnly = true;
textArea.value = msg;
document.body.appendChild(textArea);
textArea.setSelectionRange(0, msg.length);
textArea.focus();
var _result = document.execCommand('copy');
document.body.removeChild(textArea);
return _result;
}
return false;
} // 从数组中删除
function removeFromArray(array, item) {
var index;
while (index = array.indexOf(item), index > -1) {
array.splice(index, 1);
}
return array;
} // 深拷贝
function deepClone(value, customizer) {
return (0, _cloneDeepWith.default)(value, customizer);
} // 比较数组的内容是否相同
function arrayEquals(arr1, arr2) {
return arr1 === arr2 || arr1 && arr2 && arr1.length == arr2.length && !arr1.some(function (item) {
return !arr2.includes(item);
}) && !arr2.some(function (item) {
return !arr1.includes(item);
});
} // 数组中添加某个值,不会重复添加
function arrayAdd(array, val) {
!array.includes(val) && array.push(val);
return array;
} // 从数组中移除某个值,无论有几个
function arrayRemove(array, val) {
var newArray = array.filter(function (item) {
return !Object.is(item, val);
});
array.length = 0;
return Object.assign(array, newArray);
} // 从数组中添加或移除某个值
function arrayToggle(array, val) {
!array.includes(val) ? array.push(val) : arrayRemove(array, val);
return array;
} // 通过路径给一个对象设置
var setValue = _set.default; // 通过路径从一个对象取值
exports.setValue = setValue;
var getValue = _result2.default; // 获取参数
exports.getValue = getValue;
var getQueryString = _urlUtil.getFromSearch; // 所有输入框失焦
exports.getQueryString = getQueryString;
function blurInput() {
!inBrowser() && (0, _forEach.default)(document.querySelectorAll('input,textarea'), function (target) {
return target.blur();
});
} // 缓存数据相关工具
var CACHE_FUNCTION_KEY = Symbol('CACHE_FUNCTION_KEY');
var CACHE_MAP_BASE = new Map();
var CACHE_MAP_WEAK = new WeakMap();
function getCacheObj(key, cacheMap) {
if (!key) key = key + '';
if (!cacheMap) cacheMap = ['function', 'object'].includes(_typeof(key)) ? CACHE_MAP_WEAK : CACHE_MAP_BASE;
var cache = cacheMap.get(key);
if (!cache) {
cache = new Map();
cacheMap.set(key, cache);
}
return cache;
}
function _getCache(superCache, key) {
var cache = getCacheObj(key, superCache);
for (var _len = arguments.length, keys = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
keys[_key - 2] = arguments[_key];
}
if (!keys.length) {
return cache;
} else {
return _getCache.apply(void 0, [cache].concat(keys));
}
} // 通过所有参数获取缓存对象,强等类型
var getCache = _getCache.bind(null, null); // 通过所有参数来缓存方法的结果,强等类型
exports.getCache = getCache;
function memoizeAll(func, cacheMS) {
return function () {
for (var _len2 = arguments.length, e = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
e[_key2] = arguments[_key2];
}
var cache = _getCache.apply(void 0, [null].concat(e));
var _ref = cache.get(CACHE_FUNCTION_KEY) || {},
result = _ref.result,
cacheTime = _ref.cacheTime;
if (!result || cacheMS && Date.now() > cacheTime + cacheMS) {
result = func.call.apply(func, [this].concat(e));
cache.set(CACHE_FUNCTION_KEY, {
result: result,
cacheTime: Date.now()
});
}
return result;
};
} // 包装一个function, 在time时间内, 相同参数(默认func以toString, obj以json化为准)的该func只会执行一次。
function singleInstance(func) {
var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
var getKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {
for (var _len3 = arguments.length, e = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
e[_key3] = arguments[_key3];
}
return e.map(function (item) {
return _typeof(item) == 'object' ? JSON.stringify(item) : '' + item;
}).join('');
};
var cleanCacheSync = function cleanCacheSync() {
return newFunc.cache.clear();
};
var cleanCacheAsync = (0, _throttle.default)(cleanCacheSync, time, {
leading: false
});
var newFunc = (0, _memoize.default)(function () {
return cleanCacheAsync(), func.apply(void 0, arguments);
}, getKey);
return newFunc;
} // 跳转的工具
var linkUtil = {
transferUrlForReactRouter: function transferUrlForReactRouter(pathname, state, history, location) {
var autoJump = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
if (typeof pathname == 'string') {
var _pathname$split = pathname.split('?'),
_pathname$split2 = _slicedToArray(_pathname$split, 2),
path = _pathname$split2[0],
_pathname$split2$ = _pathname$split2[1],
search = _pathname$split2$ === void 0 ? '' : _pathname$split2$;
pathname = {
pathname: path,
state: state
};
if (search) pathname.search = '?' + search;
}
if (location.search && !pathname.search) pathname.search = location.search;
if (/^(https?:)?\/\//.test(pathname.pathname) && autoJump) {
// 完整域名, 直接浏览器跳转
window.open(pathname.pathname + (pathname.search || '').replace(/^\?*/, '?'));
throw new Error('浏览器跳转');
} else if (/^\./.test(pathname.pathname)) {
// 相对路径, 解析为绝对路径
pathname.pathname = new URL(pathname.pathname, location.href).pathname;
}
return pathname;
},
push: function push(href, state) {
location.href = (href.pathname || href) + (href.search || '');
window.name = JSON.stringify(state);
},
replace: function replace(href, state) {
location.href = (href.pathname || href) + (href.search || '');
window.name = JSON.stringify(state);
}
}; // 将某个字符串编码为可用于正则表达式构造函数的文本
exports.linkUtil = linkUtil;
function encodeRegExp(exp) {
return exp.replace(/[\-\/\\^$*+?.()|\[\]{}]/g, '\\$&');
}
var _default = {
obj2query: obj2query,
copyMsg: copyMsg,
inBrowser: inBrowser,
inMobileBrowser: inMobileBrowser,
inDesktopBrowser: inDesktopBrowser,
inWechat: inWechat,
inAndroidBrowser: inAndroidBrowser,
inIOSBrowser: inIOSBrowser,
removeFromArray: removeFromArray,
deepClone: deepClone,
arrayEquals: arrayEquals,
arrayToggle: arrayToggle,
arrayAdd: arrayAdd,
arrayRemove: arrayRemove,
setValue: setValue,
getValue: getValue,
getQueryString: getQueryString,
blurInput: blurInput,
getCache: getCache,
memoizeAll: memoizeAll,
linkUtil: linkUtil,
encodeRegExp: encodeRegExp
};
exports.default = _default;
//# sourceMappingURL=maps/commonUtil.js.map