UNPKG

amos-tool

Version:

amos ui tool

714 lines (542 loc) 16 kB
# amos-tool by ilex.h docs: [docs](https://unpkg.com/amos-tool@latest/docs/index.html) ## useage npm install --save amos-tool ## keywords * amos ui * amos tool ## infos [![install size](https://packagephobia.now.sh/badge?p=amos-tool)](https://packagephobia.now.sh/result?p=amos-tool) ## api |name|link|description| |------|------|------| |Base64|[Base64](#base64)|`base64加密解密`| |MD5|[MD5](#md5)|`md5加密解密`| |DES|[DES](#des)|`des加密解密`| |Browser|[Browser](#browser)|`获取浏览器类型`| |deepCopy|[deepCopy](#deepCopy)|`深度复制`| |deepEqual|[deepEqual](#deepEqual)|`深度比较(stringify方式)`| |fastDeepEqual|[fastDeepEqual](#fastDeepEqual)|`深度比较(循环)`| |parseText|[parseText](#parseText)|`替换或者补全url`| |List|[List](#list)|`List集合`| |Queue|[Queue](#queue)|`队列`| |UUID|[UUID](#uuid)|`uuid`| |browserSupport|[browserSupport](#browserSupport)|`浏览器支持`| |Log|[Log](#log)|`定制化的log日志`| |Store|[Store](#store)|`数据处理,主要是localStorage、session、cookie`| |LocationParam|[LocationParam](#locationParam)|`location 工具`| |array2tree|[array2tree](#array2tree)|`将array转化为tree数据`| |tableFilter|[tableFilter](#tableFilter)|`表格数据过滤`| |pwdPolicy|[pwdPolicy](#pwdPolicy)|`密码生成器`| |omit|[omit](#omit)|`omit操作,删除object中的键`| |pick|[pick](#pick)|`pick操作,获取object指定key组成的新对象`| |utils|[utils](#utils)|`常用工具`| |xss|[utils](#xss)|`xss 工具及`| |strUtils|[strUtils](#strUtils)|`string常用工具`| |other|[other](#other)|`其它工具集`| ### base64 ```js import { Base64 } from 'amos-tool'; // or import Base64 from 'amos-tool/lib/encrypt/_base64'; var b64 = new Base64(); b64.encode(input); b64.decode(input); ``` ### md5 ```js import { MD5 } from 'amos-tool'; // or import MD5 from 'amos-tool/lib/encrypt/_md5'; var result = MD5('value'); // 2063c1608d6e0baf80249c42e2be5804 var result = MD5('value', 'key'); // 01433efd5f16327ea4b31144572c67f6 var result = MD5('value', null, true); // 'c\xc1`\x8dn\x0b\xaf\x80$\x9cB\xe2\xbeX\x04' var result = MD5('value', 'key', true); // '\x01C>\xfd_\x162~\xa4\xb3\x11DW,g\xf6' ``` ### des > 注意,加密解密时,第一个 `秘钥` 不能为空 ```js DES.DesCore.encode(data, firstKey, secondKey, thirdKey) DES.DesCore.decode(data, firstKey, secondKey, thirdKey) DES.encode(data, secretKey); DES.decode(data, secretKey); ``` * example ```js import { DES } from 'amos-tool'; // or import DES from 'amos-tool/lib/encrypt/des'; const desCore = DES.DesCore; desCore.encode('123456', 'a'); // 484FD6D18A5501370873DB5F557A23F9 desCore.encode('123456', 'a', 'b'); // 953AFFF48E49E4B94D8B74AABB6905E5 desCore.encode('123456', 'a', 'b', 'c'); // 7C49B05CCBCBEECC5665732A177E624B desCore.decode('484FD6D18A5501370873DB5F557A23F9', 'a'); // 123456 desCore.decode('953AFFF48E49E4B94D8B74AABB6905E5', 'a', 'b'); // 123456 desCore.decode('7C49B05CCBCBEECC5665732A177E624B', 'a', 'b', 'c'); // 123456 DES.encode('123456', 'a'); // 484FD6D18A5501370873DB5F557A23F9 DES.encode('123456', 'a,b'); // 953AFFF48E49E4B94D8B74AABB6905E5 DES.encode('123456', 'a,b,c'); // 7C49B05CCBCBEECC5665732A177E624B DES.decode('484FD6D18A5501370873DB5F557A23F9', 'a'); // 123456 DES.decode('953AFFF48E49E4B94D8B74AABB6905E5', 'a,b'); // 123456 DES.decode('7C49B05CCBCBEECC5665732A177E624B', 'a,b,c'); // 123456 ``` > 注意: secretKey 'a,b,c' 与 `a, b,c` 不同,识别空格。 支持3个秘钥,采用 `,` 分割 同时,`DES.DesCore` 第一个 key 值不可以为 空('', undefined, null) ### browser ```js Browser.isFirefox(); Browser.isIE(); Browser.isEdge(); Browser.isChrome(); Browser.isSafari(); ``` ### deepCopy ```js import { deepCopy } from 'amos-tool'; deepCopy(source); import deepCopy, { eq } from 'amos-tool/lib/_deepCopy'; eq(value, other) ``` ### deepEqual ```js deepEqual(valA, valB); ``` ### fastDeepEqual ```js fastDeepEqual(valA, valB); ``` ### parseText ```js /** * 解析数据 * @param {string} text * @param {object} dataObj * @param {string|RegExp} regexps 可选 * @doc parseText('a/{b}/{c}/d',{a: 1, b:2}) 返回: 'a/1/2/d' * @doc parseText('a/b?name={name}&pwd={pwd}',{name: 'ilex', pwd:122}) 返回: 'a/b?name=ilex&pwd=123' */ parseText(text, dataObj, regexps); ``` ### list ```js List props: ArrayList: var arrlist = new List.ArrayList(); parse2string: List.parse2string(obj) parse2object: List.parse2object(str) simpleEqual: List.simpleEqual(objA, objB) isObject: List.isObject(obj) // ArrayList var arrlist = new List.ArrayList(); arrlist.size(); // get size of list arrlist.values();// all values arrlist.isEmpty();// check empty arrlist.iterator(callBack);// iterator arrlist.get(index);// 取得指定下标的值 arrlist.add(value); // add item arrlist.addAll(value);// add all item, value is a arrayList arrlist.set(index, value);// 设置值 arrlist.remove(value);// remove item arrlist.removeAt(index); // //remove item by index arrlist.indexOf(value); // get item index from list arrlist.clear(); // clear list arrlist.insert(index, value); // insert item in index place arrlist.updateValue(key, value); // use value[key] check equal ``` ### queue ```js var q = new Queue; q.push(obj) // 入队 q.pop();// 出队 q.head();// 返回队列中头部(即最新添加的)的动态对象 q.tail();// 返回队列中尾部(即最早添加的)的动态对象 q.length();// 返回数据队列长度 q.empty(); // 队列是否为空 q.clear(); // 清空 ``` ### uuid ```js uuid(len, radix); // radix must be <= 62 , uuid(8, 2) uuidFast(); uuidCompact(); timeUUID(prefix = 'amos-timeuuid'); longTimeUUID(prefix = 'longtime'); otherUUID(tpl = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'); // 同 uuidCompact,无 '-' ``` ### browserSupport * apis ```js simpleuse: defaultConfig: ['firefox/51.0', 'chrome/56'] browserSupport(); browserSupport('firefox/51.0'); browserSupport(['firefox/51.0', 'chrome/56']); withMatchs: muitlConfig: ['firefox/', 'chrome/']; browserSupport(null, { 'firefox/': {limit: consts.GREATER_EQUAL, version: 51}, 'chrome/': {limit: consts.GREATER_EQUAL, version: 56} }); browserSupport('firefox/', {limit: consts.GREATER_EQUAL, version: 51}); browserSupport(['firefox/', 'chrome/'], { 'firefox/': {limit: consts.GREATER_EQUAL, version: 51}, 'chrome/': {limit: consts.GREATER_EQUAL, version: 56} }); consts: GREATER: 1, // 大于 EQUAL: 2, // 等于 LESS: 3, // 小于 GREATER_EQUAL: 4, // 大于等于 LESS_EQUAL: 5 // 小于等于 ``` * demo ```js // 基本使用 const result = browserSupport(); const paramsList = ['firefox/', 'chrome/', 'ie']; const limit = { 'firefox/': { limit: consts.GREATER_EQUAL, version: 50 }, 'chrome/': { limit: consts.GREATER_EQUAL, version: 55 }, 'ie': { limit: consts.GREATER_EQUAL, version: 6 } }; // 自定义使用 (注意适配ie时 写法) const result2 = browserSupport(paramsList, limit); ``` ### log ```js window.LogConfig window.LogConfig.isDebug Log.trace() Log.debug() Log.info() Log.warn() Log.error() Log.fatal() // 展示 pkg 信息,不受 LogConfig 配置影响 Log.pkgInfo(name, version) ``` ### store ```js `default function list` // 所有的cookie数据,均采用 escape/unescape 进行转码、解码 encrypt(str) // 加密 decrypt(str) // 解密 setCookieByDays(name, value, days) getAllCookies() // 获取所有的cookie,同时每个key对应的value,均执行了 JSON.parse(value) setCookieByHour(name, value, hour) getCookieByName(name) removeCookieByName(name) clearAllCookie() `localStorage` const ls = Store.lsTool; ls.read(key) ls.write(key, data) ls.each(fn) ls.remove(key) ls.clearAll() `sessionStorage` const session = Store.session; session.read(key) session.write(key, data) session.each(fn) session.remove(key) session.clearAll() ``` ### locationParam ```js parse(paramString): `if paramString is undefined, paramString=window.location.search` `return all params Key Pair object` paramSearch(name, target): `if target is undefined, default window.location.search` `and if name is undefined too ` `return keyValueObjec; else if name not empty return value;` getLocationParams(): `get all locationParams, and return a key-value object` getLocationParamByName(name): `get param value by name, and return value or null` getParameter(url, name): `get target url Parameter by name, and return value or '' ` extractParam(url, name): `解析指定 url 中的参数,返回指定 name 的参数` extractParams(url): `解析指定 url 中的参数,参数对象,如果 url 为undefined,则默认采用 window.location.href` `LocationSearch` LocationParam.LocationSearch `other search tool` private: _keyValuePairs public: init(): `init this tool,set private property _keyValuePairs and return a LocationSearch` getValue(key): `return target value` getParameters(): `return all param value` ``` ### array2tree ```js import { array2tree } from 'amos-tool'; const data = [{ value: 'a', children: [{ value: 'b', children: [{ value: 'c' }, { value: 'd', }] }], }]; const values = ['a', 'b', 'c']; const result = array2tree( data, (item, level) => item.value === values[level] ); console.log(result); // [ // { value: 'a', children: [...] }, // { value: 'b', children: [...] }, // { value: 'c', children: [...] } // ] ``` ### tableFilter ```js getChildrenlength(children) flatToHierarchy(arr) filterParentPosition(arr) isInclude(smallArray, bigArray) /** * 过滤数据 * * @param {Array} vals 数据集合 * @param {any} treeData tree数据 * @returns */ filterAllCheckedData(vals, treeData) /** * 递归 * * @param {any} children * @param {any} cb */ recursive(children, cb) ``` ### pwdPolicy ```js /** * 普通密码生成策略 * @param {string} password * @return {object} { password, secretKey } */ normalPolicy(password) /** * 普通密码生成策略 * @param {string} password 密码 * @param {string} secretKey 秘钥 * @return {object} { password, secretKey } */ advancePolicy(password, secretKey) /** * 采用MD5生成密码 (不可逆) * @param {string} password * @param {string} secretKey */ useMd5Policy(password, secretKey) ``` ### omit ```js const ilex = {name: 'ilex', age: 18}; const copy = omit(ilex, ['']); // {name: 'ilex', age: 18}; const copy = omit(ilex, ['age']); // {name: 'ilex'} const copy = omit(ilex, ['name', 'age']); // {} ``` ### pick ```js const ilex = {name: 'ilex', age: 18}; const copy = pick(ilex, ['']); // {}; const copy = pick(ilex, ['age']); // {age: 18} const copy = pick(ilex, ['name', 'age']); // {name: 'ilex', age: 18} ``` ### utils ```js isString(obj); // Is a given value an array? // Delegates to ECMA5's native Array.isArray `If you want to judge object and judge array, you need to judge array first` isArray(obj); // Is a given variable an object? isObject(obj); // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. isEmpty(objOrArray); // Is a given value equal to null? isNull(obj); // Is a given variable undefined? isUndefined(obj); // Is json isJson(obj); // is image src,支持的格式(jpe?g|png|gif|bmp|ico|tga) 及其 base64 格式 isImageSrc(url); /** * 将数字部分内容转化为 * * @param {Number} number 目标 Number * @param {Number} start 起始位置 * @param {Number} len 转换位数 * @param {String} sign 替换的字符 */ encodeNumber(number, start = 3, len = 4, sign = '*'); /** * some * some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值” * @param {Array} arr * @param {function} fun */ some(arr, fun /*, thisArg */ ); // every(arr, callbackfn, thisArg); // reduce(arr, callback /*, initialValue*/); mergeAll(targetAndSources, overwrite); merge(target, source, overwrite); clone(source); ``` ### xss ```js import htmlEncode from 'amos-tool/lib/xss/htmlEncode'; import implementEncode from 'amos-tool/lib/xss/implementEncode'; htmlEncode('<'); // &lt htmlEncode('>'); // &gt htmlEncode('\''); // &#39; htmlEncode('\"'); // &quot; ... implementEncode('<script language=text/javascript>alert(document.cookie);</script>'); implementEncode('</script>'); implementEncode(' eval(abc);'); implementEncode('<img src="" onerror="alert(document.cookie);"></img>'); ... ``` ### strUtils ```js toCapitalStr(obj); // 驼峰化, 仅支持首字母大写、或者采用中杠连接的两个字母首字母大写 // 如果要支持其它输入,将正则改为: /(-|(\s+)|_)(\w)/g camelCase(obj); // 将中缸连接的字符串 驼峰化 transCamel(obj); // 字符串首字母大写 capFirst(objOrArray); // 获取字符串的hashCode码 hashCode(obj); // 进制与单位处理 dealScaleAndUnit(obj); ``` ### DB ```js import { StorageDB, RayDB } from 'amos-tool'; // 使用 RayDB const rdb = new RayDB('my-data'); rdb.setItem('key', 'value', successCb); rdb.setItem('key', 'value').then(() => {}).catch(err => console.log(err)); rdb.getItem('key', (err, value) => {}); rdb.getItem('key').then(v => {}).catch(err => console.log(err)); // 使用 StorageDB, storeName 即为 key 值 const st = new StorageDB({ name: 'db-name', storeName: 'my-table' }); st.init(() => { // 此处可以使用 st.get 获取初始数据 }); // 设置 st.set(value, evt => { }); // 获取 st.get((value) => { // }); ``` ### other * cookie: * isNode isNode(); * objectAssign: objectAssign(target, source); * parseJson: parseJson(data) * stringify: stringify(json) * supportWs: supportWs() * trim: trim(str) * arrayFilter: * merged: merged(args): combine object property * objectPath @see [doc/objectPath.md](doc/objectPath.md) * random random(len) random.randomInt(min, max) #### extra * pathToTree ```js import pathToTree from 'amos-tool/lib/extra/pathToTree'; const arr = [ 'main/lib', 'console/tt/design1', 'console/mm/vizlib' ]; const mapper = { main: 'RootView', console: 'ConsoleView' }; var result1 = pathToTree(arr, { pathKey: 'path', childrenKey: 'childRoutes', processor(item, wantedNode){ if (mapper[wantedNode]){ item.component = mapper[wantedNode]; } } }); ``` #### dom * canvas2img > saveAsImage(canvas/*canvasElement*/, width, height, type) > saveAsPNG(canvas, width, height) > saveAsGIF(canvas, width, height) > saveAsBMP(canvas, width, height) > convert2Image(canvas, width, height, type) > convert2data(canvas, type, width, height) > convert2Blob ```js /** * @param {Canvas} canvas * @param {function} fn (blob) => {} * @param {Object} options { * type: '', // 图片类型 默认 'image/png',其它类型详见MIME手册 * width: number, // 宽 * height: number, // 高 * encoderOptions: 0-1 // 图片质量 * } */ convert2Blob(canvas, fn, options) ``` > convert2PNG(canvas, width, height) > convert2JPEG(canvas, width, height) > convert2GIF(canvas, width, height) > convert2BMP(canvas, width, height) ## changelog * v1.6.13 `*` fix color Log * v1.6.3 `*` fix Log * v1.6.1 `*` fix saver * v1.4.1 `*` add `pathToRoutes` * v1.4.0 `*` add `pathToTree` to calc react router path * v1.3.21 `*` modify colorUtil * v1.3.19 `*` modify colorUtil `*` modify `utils#getFileExtension` `*` modify `index.d.ts` * v1.3.14 `*` modify cookie encode method `+` browser/indexDB * v1.3.13 `+` htmlEncode `+` implementEncode