You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.3 KiB
108 lines
2.3 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = getCallsite; |
|
|
|
function _callsites() { |
|
const data = _interopRequireDefault(require('callsites')); |
|
|
|
_callsites = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _gracefulFs() { |
|
const data = require('graceful-fs'); |
|
|
|
_gracefulFs = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _sourceMap() { |
|
const data = require('source-map'); |
|
|
|
_sourceMap = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : {default: obj}; |
|
} |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// Copied from https://github.com/rexxars/sourcemap-decorate-callsites/blob/5b9735a156964973a75dc62fd2c7f0c1975458e8/lib/index.js#L113-L158 |
|
const addSourceMapConsumer = (callsite, consumer) => { |
|
const getLineNumber = callsite.getLineNumber; |
|
const getColumnNumber = callsite.getColumnNumber; |
|
let position = null; |
|
|
|
function getPosition() { |
|
if (!position) { |
|
position = consumer.originalPositionFor({ |
|
column: getColumnNumber.call(callsite) || -1, |
|
line: getLineNumber.call(callsite) || -1 |
|
}); |
|
} |
|
|
|
return position; |
|
} |
|
|
|
Object.defineProperties(callsite, { |
|
getColumnNumber: { |
|
value() { |
|
return getPosition().column || getColumnNumber.call(callsite); |
|
}, |
|
|
|
writable: false |
|
}, |
|
getLineNumber: { |
|
value() { |
|
return getPosition().line || getLineNumber.call(callsite); |
|
}, |
|
|
|
writable: false |
|
} |
|
}); |
|
}; |
|
|
|
function getCallsite(level, sourceMaps) { |
|
const levelAfterThisCall = level + 1; |
|
const stack = (0, _callsites().default)()[levelAfterThisCall]; |
|
const sourceMapFileName = |
|
sourceMaps === null || sourceMaps === void 0 |
|
? void 0 |
|
: sourceMaps.get(stack.getFileName() || ''); |
|
|
|
if (sourceMapFileName) { |
|
try { |
|
const sourceMap = (0, _gracefulFs().readFileSync)( |
|
sourceMapFileName, |
|
'utf8' |
|
); // @ts-expect-error: Not allowed to pass string |
|
|
|
addSourceMapConsumer( |
|
stack, |
|
new (_sourceMap().SourceMapConsumer)(sourceMap) |
|
); |
|
} catch { |
|
// ignore |
|
} |
|
} |
|
|
|
return stack; |
|
}
|
|
|