@@ -6,39 +6,64 @@ export const DEFAULT_ERROR_MESSAGE = 'Unexpected error.';
66export type MaskErrorFn = ( error : unknown , message : string ) => Error ;
77
88export type SerializableGraphQLErrorLike = Error & {
9- name : 'GraphQLError' ;
10- toJSON ( ) : { message : string } ;
9+ toJSON ? ( ) : { message : string } ;
10+ extensions ?: Record < string , unknown > ;
1111} ;
1212
1313export function isGraphQLError ( error : unknown ) : error is Error & { originalError ?: Error } {
1414 return error instanceof Error && error . name === 'GraphQLError' ;
1515}
1616
17- export function createSerializableGraphQLError ( message : string ) : SerializableGraphQLErrorLike {
18- const error = new Error ( message ) ;
17+ function createSerializableGraphQLError (
18+ message : string ,
19+ originalError : unknown ,
20+ isDev : boolean
21+ ) : SerializableGraphQLErrorLike {
22+ const error : SerializableGraphQLErrorLike = new Error ( message ) ;
1923 error . name = 'GraphQLError' ;
24+ if ( isDev ) {
25+ const extensions =
26+ originalError instanceof Error
27+ ? { message : originalError . message , stack : originalError . stack }
28+ : { message : String ( originalError ) } ;
29+
30+ Object . defineProperty ( error , 'extensions' , {
31+ get ( ) {
32+ return extensions ;
33+ } ,
34+ } ) ;
35+ }
36+
2037 Object . defineProperty ( error , 'toJSON' , {
2138 value ( ) {
2239 return {
2340 message : error . message ,
41+ extensions : error . extensions ,
2442 } ;
2543 } ,
2644 } ) ;
45+
2746 return error as SerializableGraphQLErrorLike ;
2847}
2948
30- export const defaultMaskErrorFn : MaskErrorFn = ( err , message ) => {
31- if ( isGraphQLError ( err ) ) {
32- if ( err ?. originalError ) {
33- if ( isGraphQLError ( err . originalError ) ) {
34- return err ;
49+ export const createDefaultMaskErrorFn =
50+ ( isDev : boolean ) : MaskErrorFn =>
51+ ( error , message ) => {
52+ if ( isGraphQLError ( error ) ) {
53+ if ( error ?. originalError ) {
54+ if ( isGraphQLError ( error . originalError ) ) {
55+ return error ;
56+ }
57+ return createSerializableGraphQLError ( message , error , isDev ) ;
3558 }
36- return createSerializableGraphQLError ( message ) ;
59+ return error ;
3760 }
38- return err ;
39- }
40- return createSerializableGraphQLError ( message ) ;
41- } ;
61+ return createSerializableGraphQLError ( message , error , isDev ) ;
62+ } ;
63+
64+ const isDev = globalThis . process ?. env ?. NODE_ENV === 'development' ;
65+
66+ export const defaultMaskErrorFn : MaskErrorFn = createDefaultMaskErrorFn ( isDev ) ;
4267
4368export type UseMaskedErrorsOpts = {
4469 /** The function used for identify and mask errors. */
0 commit comments