@@ -2,6 +2,7 @@ import { addTracingExtensions, Hub, makeMain, Scope } from '@sentry/core';
22import { NodeClient } from '@sentry/node' ;
33import type { Transaction } from '@sentry/types' ;
44import type { Handle } from '@sveltejs/kit' ;
5+ import { redirect } from '@sveltejs/kit' ;
56import { vi } from 'vitest' ;
67
78import { sentryHandle , transformPageChunk } from '../../src/server/handle' ;
@@ -69,7 +70,18 @@ const enum Type {
6970 Async = 'async' ,
7071}
7172
72- function resolve ( type : Type , isError : boolean ) : Parameters < Handle > [ 0 ] [ 'resolve' ] {
73+ function resolve (
74+ type : Type ,
75+ isError : boolean ,
76+ throwSpecialError ?: 'redirect' | 'http' ,
77+ ) : Parameters < Handle > [ 0 ] [ 'resolve' ] {
78+ if ( throwSpecialError === 'redirect' ) {
79+ throw redirect ( 302 , '/redirect' ) ;
80+ }
81+ if ( throwSpecialError === 'http' ) {
82+ throw { status : 404 , body : 'Not found' } ;
83+ }
84+
7385 if ( type === Type . Sync ) {
7486 return ( ..._args : unknown [ ] ) => {
7587 if ( isError ) {
@@ -292,6 +304,22 @@ describe('handleSentry', () => {
292304 }
293305 } ) ;
294306
307+ it ( "doesn't send redirects in a request handler to Sentry" , async ( ) => {
308+ try {
309+ await sentryHandle ( ) ( { event : mockEvent ( ) , resolve : resolve ( type , false , 'redirect' ) } ) ;
310+ } catch ( e ) {
311+ expect ( mockCaptureException ) . toBeCalledTimes ( 0 ) ;
312+ }
313+ } ) ;
314+
315+ it ( "doesn't send Http 4xx errors in a request handler to Sentry" , async ( ) => {
316+ try {
317+ await sentryHandle ( ) ( { event : mockEvent ( ) , resolve : resolve ( type , false , 'http' ) } ) ;
318+ } catch ( e ) {
319+ expect ( mockCaptureException ) . toBeCalledTimes ( 0 ) ;
320+ }
321+ } ) ;
322+
295323 it ( 'calls `transformPageChunk`' , async ( ) => {
296324 const mockResolve = vi . fn ( ) . mockImplementation ( resolve ( type , isError ) ) ;
297325 const event = mockEvent ( ) ;
0 commit comments