@sentry/node
Version:
Official Sentry SDK for Node.js
66 lines (51 loc) • 1.73 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
const path = require('path');
const isWindowsPlatform = path.sep === '\\';
/** normalizes Windows paths */
function normalizeWindowsPath(path) {
return path
.replace(/^[A-Z]:/, '') // remove Windows-style prefix
.replace(/\\/g, '/'); // replace all `\` instances with `/`
}
/** Gets the module from a filename */
function getModuleFromFilename(
filename,
normalizeWindowsPathSeparator = isWindowsPlatform,
) {
if (!filename) {
return;
}
const normalizedFilename = normalizeWindowsPathSeparator ? normalizeWindowsPath(filename) : filename;
// eslint-disable-next-line prefer-const
let { root, dir, base: basename, ext } = path.posix.parse(normalizedFilename);
const base = (require && require.main && require.main.filename && dir) || global.process.cwd();
const normalizedBase = `${base}/`;
// It's specifically a module
let file = basename;
if (ext === '.js') {
file = file.slice(0, file.length - '.js'.length);
}
if (!root && !dir) {
// No dirname whatsoever
dir = '.';
}
let n = dir.lastIndexOf('/node_modules/');
if (n > -1) {
// /node_modules/ is 14 chars
return `${dir.slice(n + 14).replace(/\//g, '.')}:${file}`;
}
// Let's see if it's a part of the main module
// To be a part of main module, it has to share the same base
n = `${dir}/`.lastIndexOf(normalizedBase, 0);
if (n === 0) {
let moduleName = dir.slice(normalizedBase.length).replace(/\//g, '.');
if (moduleName) {
moduleName += ':';
}
moduleName += file;
return moduleName;
}
return file;
}
exports.getModuleFromFilename = getModuleFromFilename;
//# sourceMappingURL=module.js.map