55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
|
var {
|
||
|
_optionalChain
|
||
|
} = require('@sentry/utils');
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
|
||
|
const core = require('@sentry/core');
|
||
|
const async_hooks = require('async_hooks');
|
||
|
|
||
|
// eslint-disable-next-line deprecation/deprecation
|
||
|
let asyncStorage;
|
||
|
|
||
|
/**
|
||
|
* Sets the async context strategy to use AsyncLocalStorage which requires Node v12.17.0 or v13.10.0.
|
||
|
*/
|
||
|
function setHooksAsyncContextStrategy() {
|
||
|
if (!asyncStorage) {
|
||
|
// eslint-disable-next-line deprecation/deprecation
|
||
|
asyncStorage = new (async_hooks ).AsyncLocalStorage();
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line deprecation/deprecation
|
||
|
function getCurrentHub() {
|
||
|
return asyncStorage.getStore();
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line deprecation/deprecation
|
||
|
function createNewHub(parent) {
|
||
|
const carrier = {};
|
||
|
core.ensureHubOnCarrier(carrier, parent);
|
||
|
return core.getHubFromCarrier(carrier);
|
||
|
}
|
||
|
|
||
|
function runWithAsyncContext(callback, options) {
|
||
|
const existingHub = getCurrentHub();
|
||
|
|
||
|
if (existingHub && _optionalChain([options, 'optionalAccess', _ => _.reuseExisting])) {
|
||
|
// We're already in an async context, so we don't need to create a new one
|
||
|
// just call the callback with the current hub
|
||
|
return callback();
|
||
|
}
|
||
|
|
||
|
const newHub = createNewHub(existingHub);
|
||
|
|
||
|
return asyncStorage.run(newHub, () => {
|
||
|
return callback();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
core.setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });
|
||
|
}
|
||
|
|
||
|
exports.setHooksAsyncContextStrategy = setHooksAsyncContextStrategy;
|
||
|
//# sourceMappingURL=hooks.js.map
|