64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
var {
|
|
_optionalChain
|
|
} = require('@sentry/utils');
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
const domain = require('domain');
|
|
const core = require('@sentry/core');
|
|
|
|
function getActiveDomain() {
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
|
|
return (domain ).active ;
|
|
}
|
|
|
|
// eslint-disable-next-line deprecation/deprecation
|
|
function getCurrentHub() {
|
|
const activeDomain = getActiveDomain();
|
|
|
|
// If there's no active domain, just return undefined and the global hub will be used
|
|
if (!activeDomain) {
|
|
return undefined;
|
|
}
|
|
|
|
core.ensureHubOnCarrier(activeDomain);
|
|
|
|
return core.getHubFromCarrier(activeDomain);
|
|
}
|
|
|
|
// eslint-disable-next-line deprecation/deprecation
|
|
function createNewHub(parent) {
|
|
const carrier = {};
|
|
core.ensureHubOnCarrier(carrier, parent);
|
|
return core.getHubFromCarrier(carrier);
|
|
}
|
|
|
|
function runWithAsyncContext(callback, options) {
|
|
const activeDomain = getActiveDomain();
|
|
|
|
if (activeDomain && _optionalChain([options, 'optionalAccess', _ => _.reuseExisting])) {
|
|
// We're already in a domain, so we don't need to create a new one, just call the callback with the current hub
|
|
return callback();
|
|
}
|
|
|
|
const local = domain.create() ;
|
|
|
|
const parentHub = activeDomain ? core.getHubFromCarrier(activeDomain) : undefined;
|
|
const newHub = createNewHub(parentHub);
|
|
core.setHubOnCarrier(local, newHub);
|
|
|
|
return local.bind(() => {
|
|
return callback();
|
|
})();
|
|
}
|
|
|
|
/**
|
|
* Sets the async context strategy to use Node.js domains.
|
|
*/
|
|
function setDomainAsyncContextStrategy() {
|
|
core.setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });
|
|
}
|
|
|
|
exports.setDomainAsyncContextStrategy = setDomainAsyncContextStrategy;
|
|
//# sourceMappingURL=domain.js.map
|