Skip to content

Commit

Permalink
fix(nextjs): Export serverside data-fetcher wrappers from client (#7256)
Browse files Browse the repository at this point in the history
  • Loading branch information
lforst authored Feb 23, 2023
1 parent 9c2c018 commit e24127c
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 0 deletions.
14 changes: 14 additions & 0 deletions packages/nextjs/src/client/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,15 +124,29 @@ export {
withSentryServerSideAppGetInitialProps,
wrapAppGetInitialPropsWithSentry,
} from './wrapAppGetInitialPropsWithSentry';

export {
// eslint-disable-next-line deprecation/deprecation
withSentryServerSideDocumentGetInitialProps,
wrapDocumentGetInitialPropsWithSentry,
} from './wrapDocumentGetInitialPropsWithSentry';

export {
// eslint-disable-next-line deprecation/deprecation
withSentryServerSideErrorGetInitialProps,
wrapErrorGetInitialPropsWithSentry,
} from './wrapErrorGetInitialPropsWithSentry';

export {
// eslint-disable-next-line deprecation/deprecation
withSentryGetServerSideProps,
wrapGetServerSidePropsWithSentry,
} from './wrapGetServerSidePropsWithSentry';

export {
// eslint-disable-next-line deprecation/deprecation
withSentryGetStaticProps,
wrapGetStaticPropsWithSentry,
} from './wrapGetStaticPropsWithSentry';

export { wrapAppDirComponentWithSentry } from './wrapAppDirComponentWithSentry';
18 changes: 18 additions & 0 deletions packages/nextjs/src/client/wrapGetServerSidePropsWithSentry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { GetServerSideProps } from 'next';

/**
* A passthrough function in case this function is used on the clientside. We need to make the returned function async
* so we are consistent with the serverside implementation.
*/
export function wrapGetServerSidePropsWithSentry(origGetServerSideProps: GetServerSideProps): GetServerSideProps {
return new Proxy(origGetServerSideProps, {
apply: async (wrappingTarget, thisArg, args: Parameters<GetServerSideProps>) => {
return await wrappingTarget.apply(thisArg, args);
},
});
}

/**
* @deprecated Use `withSentryGetServerSideProps` instead.
*/
export const withSentryGetServerSideProps = wrapGetServerSidePropsWithSentry;
20 changes: 20 additions & 0 deletions packages/nextjs/src/client/wrapGetStaticPropsWithSentry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { GetStaticProps } from 'next';

type Props = { [key: string]: unknown };

/**
* A passthrough function in case this function is used on the clientside. We need to make the returned function async
* so we are consistent with the serverside implementation.
*/
export function wrapGetStaticPropsWithSentry(origGetStaticProps: GetStaticProps<Props>): GetStaticProps<Props> {
return new Proxy(origGetStaticProps, {
apply: async (wrappingTarget, thisArg, args: Parameters<GetStaticProps<Props>>) => {
return await wrappingTarget.apply(thisArg, args);
},
});
}

/**
* @deprecated Use `wrapGetStaticPropsWithSentry` instead.
*/
export const withSentryGetStaticProps = wrapGetStaticPropsWithSentry;
40 changes: 40 additions & 0 deletions packages/nextjs/src/index.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,46 @@ export declare function withSentryServerSideErrorGetInitialProps<F extends (...a
getInitialProps: F,
): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>>;

/**
* Wraps a `getServerSideProps` function with Sentry error and performance instrumentation.
*
* @param origGetServerSideProps The `getServerSideProps` function
* @param parameterizedRoute The page's parameterized route
* @returns A wrapped version of the function
*/
export declare function wrapGetServerSidePropsWithSentry<F extends (...args: any[]) => any>(
origGetServerSideProps: F,
parameterizedRoute: string,
): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>>;

/**
* @deprecated Use `wrapGetServerSidePropsWithSentry` instead.
*/
export declare function withSentryGetServerSideProps<F extends (...args: any[]) => any>(
origGetServerSideProps: F,
parameterizedRoute: string,
): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>>;

/**
* Wraps a `getStaticProps` function with Sentry error and performance instrumentation.
*
* @param origGetStaticProps The `getStaticProps` function
* @param parameterizedRoute The page's parameterized route
* @returns A wrapped version of the function
*/
export declare function wrapGetStaticPropsWithSentry<F extends (...args: any[]) => any>(
origGetStaticPropsa: F,
parameterizedRoute: string,
): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>>;

/**
* @deprecated Use `wrapGetStaticPropsWithSentry` instead.
*/
export declare function withSentryGetStaticProps<F extends (...args: any[]) => any>(
origGetStaticPropsa: F,
parameterizedRoute: string,
): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>>;

/**
* Wraps an `app` directory component with Sentry error instrumentation. (Currently only reports errors for server components)
*/
Expand Down

0 comments on commit e24127c

Please sign in to comment.