From 26f04e12a321140689bf97302ed9c3d6242a574e Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 11 Aug 2023 09:10:57 +0200 Subject: [PATCH 1/2] fix(nextjs): Check for existence of default export when wrapping pages Fixes https://github.com/getsentry/sentry-javascript/issues/8792 In https://github.com/getsentry/sentry-javascript/issues/8792 a user reports that we read `getInitialProps` from `undefined`. The only place where we read `getInitialProps` is in the page wrapper template. As a fix we simply check for its existence before accessing the field. --- .../src/config/templates/pageWrapperTemplate.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nextjs/src/config/templates/pageWrapperTemplate.ts b/packages/nextjs/src/config/templates/pageWrapperTemplate.ts index 12b8429bc7d4..5c4a208a5c98 100644 --- a/packages/nextjs/src/config/templates/pageWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/pageWrapperTemplate.ts @@ -14,18 +14,18 @@ import * as Sentry from '@sentry/nextjs'; import type { GetServerSideProps, GetStaticProps, NextPage as NextPageComponent } from 'next'; type NextPageModule = { - default: { getInitialProps?: NextPageComponent['getInitialProps'] }; + default?: { getInitialProps?: NextPageComponent['getInitialProps'] }; getStaticProps?: GetStaticProps; getServerSideProps?: GetServerSideProps; }; const userPageModule = wrapee as NextPageModule; -const pageComponent = userPageModule.default; +const pageComponent = userPageModule?.default; -const origGetInitialProps = pageComponent.getInitialProps; -const origGetStaticProps = userPageModule.getStaticProps; -const origGetServerSideProps = userPageModule.getServerSideProps; +const origGetInitialProps = pageComponent?.getInitialProps; +const origGetStaticProps = userPageModule?.getStaticProps; +const origGetServerSideProps = userPageModule?.getServerSideProps; const getInitialPropsWrappers: Record = { '/_app': Sentry.wrapAppGetInitialPropsWithSentry, @@ -35,7 +35,7 @@ const getInitialPropsWrappers: Record = { const getInitialPropsWrapper = getInitialPropsWrappers['__ROUTE__'] || Sentry.wrapGetInitialPropsWithSentry; -if (typeof origGetInitialProps === 'function') { +if (pageComponent && typeof origGetInitialProps === 'function') { pageComponent.getInitialProps = getInitialPropsWrapper(origGetInitialProps) as NextPageComponent['getInitialProps']; } From f1340452c482b591503b4acb1c2d3d44990edc68 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 11 Aug 2023 09:31:48 +0200 Subject: [PATCH 2/2] No nullish coalesce --- .../nextjs/src/config/templates/pageWrapperTemplate.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/nextjs/src/config/templates/pageWrapperTemplate.ts b/packages/nextjs/src/config/templates/pageWrapperTemplate.ts index 5c4a208a5c98..b98087aec142 100644 --- a/packages/nextjs/src/config/templates/pageWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/pageWrapperTemplate.ts @@ -21,11 +21,11 @@ type NextPageModule = { const userPageModule = wrapee as NextPageModule; -const pageComponent = userPageModule?.default; +const pageComponent = userPageModule ? userPageModule.default : undefined; -const origGetInitialProps = pageComponent?.getInitialProps; -const origGetStaticProps = userPageModule?.getStaticProps; -const origGetServerSideProps = userPageModule?.getServerSideProps; +const origGetInitialProps = pageComponent ? pageComponent.getInitialProps : undefined; +const origGetStaticProps = userPageModule ? userPageModule.getStaticProps : undefined; +const origGetServerSideProps = userPageModule ? userPageModule.getServerSideProps : undefined; const getInitialPropsWrappers: Record = { '/_app': Sentry.wrapAppGetInitialPropsWithSentry,