From 5f9b9ceaa880352d9b77f9e06e184d0116f6a61c Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 26 Apr 2023 16:30:48 +0200 Subject: [PATCH] feat(sveltekit): Convert `sentryHandle` to a factory function (#7975) --- packages/sveltekit/README.md | 4 ++-- packages/sveltekit/src/server/handle.ts | 10 +++++++--- packages/sveltekit/test/server/handle.test.ts | 16 ++++++++-------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/sveltekit/README.md b/packages/sveltekit/README.md index 21393e19c4e7..188cbb776bf9 100644 --- a/packages/sveltekit/README.md +++ b/packages/sveltekit/README.md @@ -125,10 +125,10 @@ The Sentry SvelteKit SDK mostly relies on [SvelteKit Hooks](https://kit.svelte.d // hooks.server.(js|ts) import { sentryHandle } from '@sentry/sveltekit'; - export const handle = sentryHandle; + export const handle = sentryHandle(); // or alternatively, if you already have a handler defined, use the `sequence` function // see: https://kit.svelte.dev/docs/modules#sveltejs-kit-hooks-sequence - // export const handle = sequence(sentryHandle, yourHandler); + // export const handle = sequence(sentryHandle(), yourHandler()); ``` ### 4. Configuring `load` Functions diff --git a/packages/sveltekit/src/server/handle.ts b/packages/sveltekit/src/server/handle.ts index 419e749d1732..88e0615d13bb 100644 --- a/packages/sveltekit/src/server/handle.ts +++ b/packages/sveltekit/src/server/handle.ts @@ -53,13 +53,17 @@ export const transformPageChunk: NonNullable { +export function sentryHandle(): Handle { + return sentryRequestHandler; +} + +const sentryRequestHandler: Handle = input => { // if there is an active transaction, we know that this handle call is nested and hence // we don't create a new domain for it. If we created one, nested server calls would // create new transactions instead of adding a child span to the currently active span. diff --git a/packages/sveltekit/test/server/handle.test.ts b/packages/sveltekit/test/server/handle.test.ts index 785aad1ca06e..94d471f20689 100644 --- a/packages/sveltekit/test/server/handle.test.ts +++ b/packages/sveltekit/test/server/handle.test.ts @@ -120,7 +120,7 @@ describe('handleSentry', () => { it('should return a response', async () => { let response: any = undefined; try { - response = await sentryHandle({ event: mockEvent(), resolve: resolve(type, isError) }); + response = await sentryHandle()({ event: mockEvent(), resolve: resolve(type, isError) }); } catch (e) { expect(e).toBeInstanceOf(Error); expect(e.message).toEqual(type); @@ -136,7 +136,7 @@ describe('handleSentry', () => { }); try { - await sentryHandle({ event: mockEvent(), resolve: resolve(type, isError) }); + await sentryHandle()({ event: mockEvent(), resolve: resolve(type, isError) }); } catch (e) { // } @@ -161,11 +161,11 @@ describe('handleSentry', () => { }); try { - await sentryHandle({ + await sentryHandle()({ event: mockEvent(), resolve: async _ => { // simulateing a nested load call: - await sentryHandle({ + await sentryHandle()({ event: mockEvent({ route: { id: 'api/users/details/[id]' } }), resolve: resolve(type, isError), }); @@ -216,7 +216,7 @@ describe('handleSentry', () => { }); try { - await sentryHandle({ event, resolve: resolve(type, isError) }); + await sentryHandle()({ event, resolve: resolve(type, isError) }); } catch (e) { // } @@ -256,7 +256,7 @@ describe('handleSentry', () => { }); try { - await sentryHandle({ event, resolve: resolve(type, isError) }); + await sentryHandle()({ event, resolve: resolve(type, isError) }); } catch (e) { // } @@ -280,7 +280,7 @@ describe('handleSentry', () => { }); try { - await sentryHandle({ event: mockEvent(), resolve: resolve(type, isError) }); + await sentryHandle()({ event: mockEvent(), resolve: resolve(type, isError) }); } catch (e) { expect(mockCaptureException).toBeCalledTimes(1); expect(addEventProcessorSpy).toBeCalledTimes(1); @@ -296,7 +296,7 @@ describe('handleSentry', () => { const mockResolve = vi.fn().mockImplementation(resolve(type, isError)); const event = mockEvent(); try { - await sentryHandle({ event, resolve: mockResolve }); + await sentryHandle()({ event, resolve: mockResolve }); } catch (e) { expect(e).toBeInstanceOf(Error); expect(e.message).toEqual(type);