From 2a957ddec6c3a74b898f267538b2b70e1d0fe07f Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 7 Apr 2025 15:04:08 +0200 Subject: [PATCH 1/2] stuff --- packages/nextjs/src/common/types.ts | 2 +- packages/nextjs/src/common/wrapServerComponentWithSentry.ts | 2 ++ packages/nextjs/src/config/loaders/wrappingLoader.ts | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/nextjs/src/common/types.ts b/packages/nextjs/src/common/types.ts index ebf35c68c1ba..960e1b2c39c8 100644 --- a/packages/nextjs/src/common/types.ts +++ b/packages/nextjs/src/common/types.ts @@ -4,7 +4,7 @@ import type { RequestAsyncStorage } from '../config/templates/requestAsyncStorag export type ServerComponentContext = { componentRoute: string; - componentType: 'Page' | 'Layout' | 'Head' | 'Not-found' | 'Loading' | 'Unknown'; + componentType: 'Page' | 'Layout' | 'Head' | 'Not-found' | 'Loading' | 'Unknown' | 'Template' | 'Default'; headers?: WebFetchHeaders; }; diff --git a/packages/nextjs/src/common/wrapServerComponentWithSentry.ts b/packages/nextjs/src/common/wrapServerComponentWithSentry.ts index d4dce97979f9..6fbc78011bea 100644 --- a/packages/nextjs/src/common/wrapServerComponentWithSentry.ts +++ b/packages/nextjs/src/common/wrapServerComponentWithSentry.ts @@ -89,6 +89,8 @@ export function wrapServerComponentWithSentry any> attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'component', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nextjs', + 'sentry.nextjs.function.type': componentType, + 'sentry.nextjs.function.route': componentRoute, }, }, span => { diff --git a/packages/nextjs/src/config/loaders/wrappingLoader.ts b/packages/nextjs/src/config/loaders/wrappingLoader.ts index 422dbd1fd2aa..a17851c38d29 100644 --- a/packages/nextjs/src/config/loaders/wrappingLoader.ts +++ b/packages/nextjs/src/config/loaders/wrappingLoader.ts @@ -205,6 +205,12 @@ export default function wrappingLoader( case 'loading': componentType = 'Loading'; break; + case 'template': + componentType = 'Template'; + break; + case 'default': + componentType = 'Default'; + break; default: componentType = 'Unknown'; } From c1b342c5ecf34d1dc591df62184f5c714ae6d2bd Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 7 Apr 2025 17:02:13 +0200 Subject: [PATCH 2/2] lil bit of tests :) --- .../nextjs-app-dir/app/(nested-layout)/template.tsx | 3 +++ .../tests/connected-servercomponent-trace.test.ts | 1 + .../nextjs-app-dir/tests/server-components.test.ts | 8 ++++++++ 3 files changed, 12 insertions(+) create mode 100644 dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/(nested-layout)/template.tsx diff --git a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/(nested-layout)/template.tsx b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/(nested-layout)/template.tsx new file mode 100644 index 000000000000..ae175b881314 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/(nested-layout)/template.tsx @@ -0,0 +1,3 @@ +export default function Template({ children }: { children: React.ReactNode }) { + return
{children}
; +} diff --git a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/connected-servercomponent-trace.test.ts b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/connected-servercomponent-trace.test.ts index 3d2f29358d54..1a8d709d1259 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/connected-servercomponent-trace.test.ts +++ b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/connected-servercomponent-trace.test.ts @@ -16,6 +16,7 @@ test('Will create a transaction with spans for every server component and metada expect(spanDescriptions).toContainEqual('Layout Server Component (/(nested-layout)/nested-layout)'); expect(spanDescriptions).toContainEqual('Layout Server Component (/(nested-layout))'); + expect(spanDescriptions).toContainEqual('Template Server Component (/(nested-layout))'); expect(spanDescriptions).toContainEqual('Page Server Component (/(nested-layout)/nested-layout)'); expect(spanDescriptions).toContainEqual('Page.generateMetadata (/(nested-layout)/nested-layout)'); }); diff --git a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts index f2e73c892a9b..f65cf7dbc1c1 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts +++ b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts @@ -79,6 +79,10 @@ test('Should set a "not_found" status on a server component span when notFound() description: 'Page Server Component (/server-component/not-found)', op: 'function.nextjs', status: 'not_found', + data: expect.objectContaining({ + 'sentry.nextjs.function.type': 'Page', + 'sentry.nextjs.function.route': '/server-component/not-found', + }), }), ); }); @@ -107,6 +111,10 @@ test('Should capture an error and transaction for a app router page', async ({ p description: 'Page Server Component (/server-component/faulty)', op: 'function.nextjs', status: 'internal_error', + data: expect.objectContaining({ + 'sentry.nextjs.function.type': 'Page', + 'sentry.nextjs.function.route': '/server-component/faulty', + }), }), );