wrapGetServerSidePropsWithSentry.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var {
  2. _nullishCoalesce,
  3. _optionalChain
  4. } = require('@sentry/utils');
  5. Object.defineProperty(exports, '__esModule', { value: true });
  6. const core = require('@sentry/core');
  7. const utils = require('@sentry/utils');
  8. const isBuild = require('./utils/isBuild.js');
  9. const wrapperUtils = require('./utils/wrapperUtils.js');
  10. /**
  11. * Create a wrapped version of the user's exported `getServerSideProps` function
  12. *
  13. * @param origGetServerSideProps The user's `getServerSideProps` function
  14. * @param parameterizedRoute The page's parameterized route
  15. * @returns A wrapped version of the function
  16. */
  17. function wrapGetServerSidePropsWithSentry(
  18. origGetServerSideProps,
  19. parameterizedRoute,
  20. ) {
  21. return new Proxy(origGetServerSideProps, {
  22. apply: async (wrappingTarget, thisArg, args) => {
  23. if (isBuild.isBuild()) {
  24. return wrappingTarget.apply(thisArg, args);
  25. }
  26. core.addTracingExtensions();
  27. const [context] = args;
  28. const { req, res } = context;
  29. const errorWrappedGetServerSideProps = wrapperUtils.withErrorInstrumentation(wrappingTarget);
  30. const options = _optionalChain([core.getClient, 'call', _ => _(), 'optionalAccess', _2 => _2.getOptions, 'call', _3 => _3()]);
  31. if (_optionalChain([options, 'optionalAccess', _4 => _4.instrumenter]) === 'sentry') {
  32. const tracedGetServerSideProps = wrapperUtils.withTracedServerSideDataFetcher(errorWrappedGetServerSideProps, req, res, {
  33. dataFetcherRouteName: parameterizedRoute,
  34. requestedRouteName: parameterizedRoute,
  35. dataFetchingMethodName: 'getServerSideProps',
  36. });
  37. const serverSideProps = await (tracedGetServerSideProps.apply(thisArg, args)
  38. );
  39. if (serverSideProps && 'props' in serverSideProps) {
  40. const activeSpan = core.getActiveSpan();
  41. const requestTransaction = _nullishCoalesce(wrapperUtils.getSpanFromRequest(req), () => ( (activeSpan ? core.getRootSpan(activeSpan) : undefined)));
  42. if (requestTransaction) {
  43. serverSideProps.props._sentryTraceData = core.spanToTraceHeader(requestTransaction);
  44. const dynamicSamplingContext = core.getDynamicSamplingContextFromSpan(requestTransaction);
  45. serverSideProps.props._sentryBaggage = utils.dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);
  46. }
  47. }
  48. return serverSideProps;
  49. } else {
  50. return errorWrappedGetServerSideProps.apply(thisArg, args);
  51. }
  52. },
  53. });
  54. }
  55. /**
  56. * @deprecated Use `withSentryGetServerSideProps` instead.
  57. */
  58. const withSentryGetServerSideProps = wrapGetServerSidePropsWithSentry;
  59. exports.withSentryGetServerSideProps = withSentryGetServerSideProps;
  60. exports.wrapGetServerSidePropsWithSentry = wrapGetServerSidePropsWithSentry;
  61. //# sourceMappingURL=wrapGetServerSidePropsWithSentry.js.map