You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					44 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					44 lines
				
				1.1 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const { inherits, format } = require('util') | ||
|  | 
 | ||
|  | function createError (code, message, statusCode = 500, Base = Error) { | ||
|  |   if (!code) throw new Error('Fastify error code must not be empty') | ||
|  |   if (!message) throw new Error('Fastify error message must not be empty') | ||
|  | 
 | ||
|  |   code = code.toUpperCase() | ||
|  | 
 | ||
|  |   function FastifyError (a, b, c) { | ||
|  |     if (!(this instanceof FastifyError)) { | ||
|  |       return new FastifyError(a, b, c) | ||
|  |     } | ||
|  |     Error.captureStackTrace(this, FastifyError) | ||
|  |     this.name = 'FastifyError' | ||
|  |     this.code = code | ||
|  | 
 | ||
|  |     // more performant than spread (...) operator
 | ||
|  |     if (a && b && c) { | ||
|  |       this.message = format(message, a, b, c) | ||
|  |     } else if (a && b) { | ||
|  |       this.message = format(message, a, b) | ||
|  |     } else if (a) { | ||
|  |       this.message = format(message, a) | ||
|  |     } else { | ||
|  |       this.message = message | ||
|  |     } | ||
|  | 
 | ||
|  |     this.statusCode = statusCode || undefined | ||
|  |   } | ||
|  |   FastifyError.prototype[Symbol.toStringTag] = 'Error' | ||
|  | 
 | ||
|  |   FastifyError.prototype.toString = function () { | ||
|  |     return `${this.name} [${this.code}]: ${this.message}` | ||
|  |   } | ||
|  | 
 | ||
|  |   inherits(FastifyError, Base) | ||
|  | 
 | ||
|  |   return FastifyError | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = createError |