UNPKG

willow-utils

Version:

工具库

361 lines (273 loc) 12.2 kB
"use strict"; 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