11export type CustomErrorOptions = { [ K in Exclude < keyof CustomError , 'stack' | 'name' > ] ?: CustomError [ K ] } ;
22
3+ /**
4+ * Base class for custom errors
5+ */
36export class CustomError extends Error {
47
58 readonly status : number ;
@@ -9,34 +12,28 @@ export class CustomError extends Error {
912
1013 constructor ( options : CustomErrorOptions ) ;
1114 constructor ( ...args : any [ ] ) ;
12- constructor ( ...args : any [ ] ) {
15+ constructor ( ...args : any [ ] ) { // tslint:disable-line:cognitive-complexity
1316 let message : string | undefined ;
1417 let status : number = 0 ;
1518 let data : any ;
1619 let code : string | undefined ;
1720 let inner : Error | undefined ;
1821 for ( const arg of args ) {
1922 const typeofArg = typeof arg ;
20- switch ( true ) {
21- case message !== undefined && typeofArg === 'string' : {
22- code = arg ;
23- } break ;
24- case typeofArg === 'string' : {
25- message = arg ;
26- } break ;
27- case typeofArg === 'number' : {
28- status = arg ;
29- } break ;
30- case arg instanceof Error : {
31- inner = arg ;
32- } break ;
33- case typeofArg === 'object' : {
34- if ( 'status' in arg ) { status = arg . status ; }
35- if ( 'message' in arg ) { message = arg . message ; }
36- if ( 'data' in arg ) { data = arg . data ; }
37- if ( 'code' in arg ) { code = arg . code ; }
38- if ( 'inner' in arg ) { inner = arg . inner ; }
39- } break ;
23+ if ( message !== undefined && typeofArg === 'string' ) {
24+ code = arg ;
25+ } else if ( typeofArg === 'string' ) {
26+ message = arg ;
27+ } else if ( typeofArg === 'number' ) {
28+ status = arg ;
29+ } else if ( arg instanceof Error ) {
30+ inner = arg ;
31+ } else if ( typeofArg === 'object' ) {
32+ if ( 'status' in arg ) { status = arg . status ; }
33+ if ( 'message' in arg ) { message = arg . message ; }
34+ if ( 'data' in arg ) { data = arg . data ; }
35+ if ( 'code' in arg ) { code = arg . code ; }
36+ if ( 'inner' in arg ) { inner = arg . inner ; }
4037 }
4138 }
4239 super ( message ) ;
0 commit comments