tplus-pos
Version:
pos module
131 lines (106 loc) • 4.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getOwnPropertyNames = require('babel-runtime/core-js/object/get-own-property-names');
var _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
exports.default = function (proxyName) {
//输出方法名
function printMethodName(name, originFun) {
var methodName = _FuncUtil2.default.getFnName(originFun);
console.log(name + ' \u65B9\u6CD5\u540D ' + methodName);
}
//输出参数名
function printArgument(name, argsNames, args) {
var i = void 0,
length = args.length;
for (i = 0; i < length; i++) {
console.log(name + ' \u53C2\u6570' + (i + 1) + ' ' + argsNames[i] + ':', (0, _mobx.isObservable)(args[i]) ? (0, _mobx.toJS)(args[i]) : args[i]);
}
}
//打印函数执行结果和消耗时间
function printMethodExeTime(name, startTime, endTime, result) {
var costTime = endTime - startTime;
console.log(name + ' \u51FD\u6570\u6267\u884C\u7ED3\u679C ', result);
console.log(name + ' \u51FD\u6570\u6D88\u8017\u65F6\u95F4 ', costTime + 'ms');
}
// 包裹方法,在原方法前后增加执行方法
function proxyWrapped(originFun) {
var argsNames = _FuncUtil2.default.getArgs(originFun);
printMethodName(proxy.name, originFun);
//判断是否是同步函数
if (_FuncUtil2.default.isAsyncFunction(originFun)) {
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var startTime,
result,
endTime,
_args = arguments;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
printArgument(proxy.name, argsNames, _args);
startTime = new Date().getTime();
_context.next = 4;
return originFun.apply(this, _args);
case 4:
result = _context.sent;
endTime = new Date().getTime();
printMethodExeTime(proxy.name, startTime, endTime, result);
return _context.abrupt('return', result);
case 8:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
} else {
return function () {
printArgument(proxy.name, argsNames, arguments);
var startTime = new Date().getTime();
var result = originFun.apply(this, arguments);
var endTime = new Date().getTime();
printMethodExeTime(proxy.name, startTime, endTime, result);
return result;
};
}
}
var proxy = {
// 添加被代理方法,参数a为被代理方法,参数b为目标对象
add: function add(a, b) {
var funName, index;
// 不传对象时默认为window对象
b = b || window;
// 判断参数a类型,如果为正则表达式
if ((typeof a === 'undefined' ? 'undefined' : (0, _typeof3.default)(a)) == "object" && a.test) {
// 替换所以满足正则表达式的方法
(0, _getOwnPropertyNames2.default)(b.__proto__).forEach(function (methodName) {
if (a.test(methodName)) {
b[methodName] = proxyWrapped(b[methodName]);
}
});
} else if (typeof b == "function" && typeof a == "string") {
b[a] = proxyWrapped(b[a]);
}
return this;
},
// 默认标识
name: '代理方法'
};
if (typeof proxyName == 'string') {
proxy.name = proxyName;
}
return proxy;
};
var _FuncUtil = require('../util/FuncUtil');
var _FuncUtil2 = _interopRequireDefault(_FuncUtil);
var _mobx = require('mobx');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=LogAopFactory.js.map