mockm
Version:
Analog interface server, painless parallel development of front and back ends.
122 lines (94 loc) • 3.65 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _reverse = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reverse"));
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
var _padStart = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/pad-start"));
require(`util`).inspect.defaultOptions.depth = null; // console.log 展开对象
const {
inspect
} = require(`util`);
function print(...argList) {
// 用于输出有用信息, 而不是调试信息
const resList = [];
(0, _map.default)(argList).call(argList, item => {
var _context;
const type = isType(item);
(0, _forEach.default)(_context = [[`undefined`, ``], [`string`, `number`, item], [`object`, `error`, `array`, inspect(item || ``, false, null, true)]]).call(_context, item2 => {
var _context2;
return (0, _includes.default)(_context2 = (0, _slice.default)(item2).call(item2, 0, -1)).call(_context2, type) && resList.push((0, _reverse.default)(item2).call(item2)[0]);
});
});
console._log ? console._log(...resList) : console.log(...resList);
}
function logHelper(isUse = true) {
// 重写 console.log 方法, 打印时附带日期, 所在行
if (isUse === false) {
console.log = console._log ? console._log : console.log;
return;
}
const log = console.log;
console._log = log;
console.log = (...arg) => {
var _context3;
const getStackTrace = () => {
const obj = {};
Error.captureStackTrace(obj, getStackTrace);
return obj.stack;
};
const stack = getStackTrace() || ``;
const matchResult = stack.match(/\s+at .*/g) || [];
const line = (0, _trim.default)(_context3 = `${matchResult[1]}`.replace(/^\s+at /, ``)).call(_context3);
if ( // 重写时忽略的调用栈路径
line.match(/node_modules/)) {
log(...arg);
return undefined;
} else {
log(dateFormat(`YYYY-MM-DD hh:mm:ss`, new Date()));
log(`> ${line}`);
log(...arg);
}
};
}
/**
* 时间格式化
* @param {string} fmt 格式
* @param {Date} date 时间对象
*/
function dateFormat(fmt, date) {
let ret;
const opt = {
'Y+': date.getFullYear().toString(),
// 年
'M+': (date.getMonth() + 1).toString(),
// 月
'D+': date.getDate().toString(),
// 日
'h+': date.getHours().toString(),
// 时
'm+': date.getMinutes().toString(),
// 分
's+': date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp(`(${k})`).exec(fmt);
if (ret) {
var _context4;
fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : (0, _padStart.default)(_context4 = opt[k]).call(_context4, ret[1].length, `0`));
}
}
return fmt;
}
function isType(data, type = undefined) {
// 判断数据是否为 type, 或返回 type
const dataType = Object.prototype.toString.call(data).match(/\s(.+)]/)[1].toLowerCase();
return type ? dataType === type.toLowerCase() : dataType;
}
module.exports = {
logHelper,
print
};