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 });
}
Sets the async context strategy to use AsyncLocalStorage which requires Node v12.17.0 or v13.10.0.