@eggjs/tegg-common-util
Version:
common util for tegg
44 lines • 3.01 kB
JavaScript
;
/**
* Capture call site stack from v8.
* https://github.com/v8/v8/wiki/Stack-Trace-API
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.StackUtil = void 0;
function prepareObjectStackTrace(_, stack) {
return stack;
}
class StackUtil {
// from egg-core/utils
// https://github.com/eggjs/egg-core/blob/master/lib/utils/index.js#L51
static getCalleeFromStack(withLine, stackIndex) {
stackIndex = stackIndex === undefined ? 2 : stackIndex;
const limit = Error.stackTraceLimit;
const prep = Error.prepareStackTrace;
Error.prepareStackTrace = prepareObjectStackTrace;
Error.stackTraceLimit = 10;
// capture the stack
const obj = {
stack: [],
};
Error.captureStackTrace(obj);
const callSite = obj.stack[stackIndex];
let fileName;
/* istanbul ignore else */
if (callSite) {
// egg-mock will create a proxy
// https://github.com/eggjs/egg-mock/blob/master/lib/app.js#L174
fileName = callSite.getFileName();
}
Error.prepareStackTrace = prep;
Error.stackTraceLimit = limit;
/* istanbul ignore if */
if (!callSite || !fileName)
return '<anonymous>';
if (!withLine)
return fileName;
return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
}
}
exports.StackUtil = StackUtil;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhY2tVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0YWNrVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxTQUFTLHVCQUF1QixDQUFDLENBQUMsRUFBRSxLQUFLO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQWEsU0FBUztJQUNwQixzQkFBc0I7SUFDdEIsdUVBQXVFO0lBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFpQixFQUFFLFVBQW1CO1FBQzlELFVBQVUsR0FBRyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUVyQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7UUFDbEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0Isb0JBQW9CO1FBQ3BCLE1BQU0sR0FBRyxHQUFpQztZQUN4QyxLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFDRixLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQztRQUNiLDBCQUEwQjtRQUMxQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsK0JBQStCO1lBQy9CLGdFQUFnRTtZQUNoRSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFFRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTlCLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDL0IsT0FBTyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDakYsQ0FBQztDQUNGO0FBakNELDhCQWlDQyJ9