@areslabs/alita-core
Version:
alita-core
65 lines (51 loc) • 1.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = myTraverse;
var _traverse = _interopRequireDefault(require("@babel/traverse"));
var _codeFrame = require("@babel/code-frame");
var _configure = _interopRequireDefault(require("../configure"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function myTraverse(ast, opts) {
const newOpts = wrappCatchOpts(ast, opts);
(0, _traverse.default)(ast, newOpts);
}
function wrappCatchOpts(ast, opts) {
const newOpts = {};
const allKeys = Object.keys(opts);
for (let i = 0; i < allKeys.length; i++) {
const k = allKeys[i];
const v = opts[k];
if (typeof v === 'function') {
newOpts[k] = wrapperCatch(ast, v);
} else {
newOpts[k] = v;
}
}
return newOpts;
}
function wrapperCatch(ast, func) {
return function (...args) {
try {
return func(...args);
} catch (e) {
const relativeFilePath = ast.__filepath.replace(_configure.default.inputFullpath, '');
const code = ast.__sourceCode;
const loc = args[0].node.loc;
if (!loc) {
console.log(`异常信息:\n`.error, e);
throw e;
}
const result = (0, _codeFrame.codeFrameColumns)(code, loc, {
highlightCode: true,
linesAbove: 2,
linesBelow: 2
});
console.log(`${relativeFilePath} 转化出错,这可能是alita本身的bug,please submit an issue with below infomations。`.error);
console.log(`代码片段:\n`.error, result);
console.log(`异常信息:\n`.error, e);
throw e;
}
};
}