11import fs from 'fs'
22import path from 'path'
3+ import Honeybadger from '@honeybadger-io/js' ;
34import HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack'
45import type { WebpackConfigContext } from 'next/dist/server/config-shared' ;
56import { HoneybadgerNextJsConfig , NextJsRuntime , HoneybadgerWebpackPluginOptions } from './types'
@@ -25,15 +26,6 @@ function shouldUploadSourceMaps(honeybadgerNextJsConfig: HoneybadgerNextJsConfig
2526 return true
2627}
2728
28- export function setupHoneybadger ( config , honeybadgerNextJsConfig : HoneybadgerNextJsConfig ) {
29- _silent = honeybadgerNextJsConfig ?. silent ?? true
30-
31- return {
32- ...config ,
33- webpack : mergeWithExistingWebpackConfig ( config . webpack , honeybadgerNextJsConfig )
34- }
35- }
36-
3729function mergeWithExistingWebpackConfig ( nextJsWebpackConfig , honeybadgerNextJsConfig : HoneybadgerNextJsConfig ) {
3830 return function webpackFunctionMergedWithHb ( webpackConfig , context : WebpackConfigContext ) {
3931
@@ -167,3 +159,33 @@ function getWebpackPluginOptions(honeybadgerNextJsConfig: HoneybadgerNextJsConfi
167159 silent : _silent ,
168160 }
169161}
162+
163+ export function setupHoneybadger ( config , honeybadgerNextJsConfig : HoneybadgerNextJsConfig ) {
164+ _silent = honeybadgerNextJsConfig ?. silent ?? true
165+
166+ return {
167+ ...config ,
168+ webpack : mergeWithExistingWebpackConfig ( config . webpack , honeybadgerNextJsConfig )
169+ }
170+ }
171+
172+ export async function notifyFromNextErrorComponent ( contextData ) {
173+ const { req, res, err } = contextData ;
174+
175+ // exclude 40x except when this component is rendered from a routing error or a custom server
176+ // https://nextjs.org/docs/advanced-features/custom-error-page#caveats
177+ const statusCode = ( res && res . statusCode ) || contextData . statusCode ;
178+ if ( statusCode && statusCode < 500 ) {
179+ Honeybadger . config . logger . debug ( `_error.js skipping because statusCode is ${ statusCode } ` ) ;
180+ return Promise . resolve ( ) ;
181+ }
182+
183+ await Honeybadger . notifyAsync ( err || `_error.js called with falsy error (${ err } )` , {
184+ context :
185+ {
186+ url : req . url ,
187+ method : req . method ,
188+ statusCode : res . statusCode ,
189+ }
190+ } ) ;
191+ }
0 commit comments