@sentry/node
Version:
Sentry Node SDK using OpenTelemetry for performance instrumentation
99 lines (95 loc) • 2.43 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const node_fs = require('node:fs');
const node_path = require('node:path');
const core = require('@sentry/core');
let moduleCache;
const INTEGRATION_NAME = "Modules";
function getServerModules() {
if (typeof __SENTRY_SERVER_MODULES__ !== "undefined") {
return __SENTRY_SERVER_MODULES__;
}
return core.GLOBAL_OBJ.__SENTRY_SERVER_MODULES__ ?? {};
}
const _modulesIntegration = (() => {
return {
name: INTEGRATION_NAME,
processEvent(event) {
event.modules = {
...event.modules,
..._getModules()
};
return event;
},
getModules: _getModules
};
});
const modulesIntegration = _modulesIntegration;
function getRequireCachePaths() {
try {
return require.cache ? Object.keys(require.cache) : [];
} catch {
return [];
}
}
function collectModules() {
return {
...getServerModules(),
...getModulesFromPackageJson(),
...collectRequireModules()
};
}
function collectRequireModules() {
const mainPaths = require.main?.paths || [];
const paths = getRequireCachePaths();
const infos = {};
const seen = /* @__PURE__ */ new Set();
paths.forEach((path) => {
let dir = path;
const updir = () => {
const orig = dir;
dir = node_path.dirname(orig);
if (!dir || orig === dir || seen.has(orig)) {
return void 0;
}
if (mainPaths.indexOf(dir) < 0) {
return updir();
}
const pkgfile = node_path.join(orig, "package.json");
seen.add(orig);
if (!node_fs.existsSync(pkgfile)) {
return updir();
}
try {
const info = JSON.parse(node_fs.readFileSync(pkgfile, "utf8"));
infos[info.name] = info.version;
} catch {
}
};
updir();
});
return infos;
}
function _getModules() {
if (!moduleCache) {
moduleCache = collectModules();
}
return moduleCache;
}
function getPackageJson() {
try {
const filePath = node_path.join(process.cwd(), "package.json");
const packageJson = JSON.parse(node_fs.readFileSync(filePath, "utf8"));
return packageJson;
} catch {
return {};
}
}
function getModulesFromPackageJson() {
const packageJson = getPackageJson();
return {
...packageJson.dependencies,
...packageJson.devDependencies
};
}
exports.modulesIntegration = modulesIntegration;
//# sourceMappingURL=modules.js.map