UNPKG

blue-fish-helper

Version:

这是一个修复漏洞后的helper

159 lines (158 loc) 4.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const dayjs = require("dayjs"); const _ = require("lodash"); const attach_1 = require("./lib/attach"); exports.default = new (class { // 附加数据 // eslint-disable-next-line @typescript-eslint/default-param-last async attach(list, key, extend = '', worker, value = {}) { const keys = key.split('->'); // 获取需要的ID列表 const ids = attach_1.default.getIds(list, keys); // 根据ID列表通过worker获取数据 const data = ids.length < 1 ? {} : await worker(ids); // 遍历数据,将数据附加到list attach_1.default.setValues(list, data, keys, extend, value); } // 延迟执行函数 async timeout(ms = 0) { return await new Promise((resolve) => { setTimeout(() => resolve(), ms); }); } // 运行代码后安全退出 run(runner) { runner() .then(() => process.exit(0)) .catch((e) => { console.error(e); process.exit(1); }); } // 时间日期格式化 datetime(format = 'YYYY-MM-DD HH:mm:ss', time) { // https://day.js.org/docs/zh-CN/display/format return dayjs(time).format(format); } // try但不报错 try(work) { try { return work(); } catch (e) { _.noop; } } // 解析成数组,如果已经是数组则直接返回,不是数组则将值放在数组中 parseArray(data) { return Array.isArray(data) ? data : [data]; } // 解析成排序过的QueryString sortQueryString(...data) { const qsArray = []; _.forEach(data, (d) => { _.forEach(d, (v, k) => { const val = typeof v === 'object' ? JSON.stringify(v) : v; qsArray.push(k + '=' + val); }); }); qsArray.sort(); return qsArray.join('&'); } // 列表转换成树形式 list2tree(list, rootValue = '', idKey = 'id', pidKey = 'parentId', childKey = 'child') { const temp = {}; const tree = []; list.forEach((item) => { temp[item[idKey]] = item; }); list.forEach((item) => { if (item[pidKey] === rootValue) tree.push(temp[item[idKey]]); else if (temp[item[pidKey]]) { temp[item[pidKey]][childKey] = temp[item[pidKey]][childKey] || []; temp[item[pidKey]][childKey].push(temp[item[idKey]]); } }); return tree; } // 列表转成对象形式 list2object(list, key = 'id') { const temp = {}; list.forEach((item) => { const id = item[key] || false; if (id) temp[id] = item; }); return temp; } // 异步遍历循环 async asyncEach(list, iteratee) { for (const i in list) { // eslint-disable-next-line no-prototype-builtins if (list.hasOwnProperty(i)) { await iteratee(list[i], i); } } } // 安全的异步遍历循环 async asyncEachSafe(list, callback) { for (const i in list) { try { // eslint-disable-next-line no-prototype-builtins if (list.hasOwnProperty(i)) { await callback(list[i], i); } } catch (e) { _.noop; } } } // 将所有键转换为camelCase风格 camelCaseKeys(data) { if (_.isPlainObject(data)) { const result = {}; _.forEach(data, (v, k) => { k = _.camelCase(k); v = this.camelCaseKeys(v); result[k] = v; }); return result; } else if (_.isArray(data)) { return _.map(data, (v) => { v = this.camelCaseKeys(v); return v; }); } else return data; } // 将所有键转换为snakeCase风格 snakeCaseKeys(data) { if (_.isPlainObject(data)) { const result = {}; _.forEach(data, (v, k) => { k = _.snakeCase(k); v = this.snakeCaseKeys(v); result[k] = v; }); return result; } else if (_.isArray(data)) { return _.map(data, (v) => { v = this.snakeCaseKeys(v); return v; }); } else return data; } // 判断汉字长度 stringLength(str) { // eslint-disable-next-line no-control-regex return str.replace(/[^\x00-\xff]/g, '01').length; } })();