middlewareWrapperTemplate.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import * as Sentry from '@sentry/nextjs';
  2. import * as serverComponentModule from '__SENTRY_WRAPPING_TARGET_FILE__';
  3. export * from '__SENTRY_WRAPPING_TARGET_FILE__';
  4. /*
  5. * This file is a template for the code which will be substituted when our webpack loader handles middleware files.
  6. *
  7. * We use `__SENTRY_WRAPPING_TARGET_FILE__` as a placeholder for the path to the file being wrapped. Because it's not a real package,
  8. * this causes both TS and ESLint to complain, hence the pragma comments below.
  9. */
  10. const userApiModule = serverComponentModule ;
  11. // Default to undefined. It's possible for Next.js users to not define any exports/handlers in an API route. If that is
  12. // the case Next.js wil crash during runtime but the Sentry SDK should definitely not crash so we need tohandle it.
  13. let userProvidedNamedHandler = undefined;
  14. let userProvidedDefaultHandler = undefined;
  15. if ('middleware' in userApiModule && typeof userApiModule.middleware === 'function') {
  16. // Handle when user defines via named ESM export: `export { middleware };`
  17. userProvidedNamedHandler = userApiModule.middleware;
  18. } else if ('default' in userApiModule && typeof userApiModule.default === 'function') {
  19. // Handle when user defines via ESM export: `export default myFunction;`
  20. userProvidedDefaultHandler = userApiModule.default;
  21. } else if (typeof userApiModule === 'function') {
  22. // Handle when user defines via CJS export: "module.exports = myFunction;"
  23. userProvidedDefaultHandler = userApiModule;
  24. }
  25. const middleware = userProvidedNamedHandler
  26. ? Sentry.wrapMiddlewareWithSentry(userProvidedNamedHandler)
  27. : undefined;
  28. const middlewareWrapperTemplate = userProvidedDefaultHandler ? Sentry.wrapMiddlewareWithSentry(userProvidedDefaultHandler) : undefined;
  29. export { middlewareWrapperTemplate as default, middleware };