blue-fish-helper
Version:
这是一个修复漏洞后的helper
159 lines (158 loc) • 4.85 kB
JavaScript
;
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;
}
})();