| 
									
										
										
										
											2018-05-10 13:56:07 +01:00
										 |  |  | import * as express from 'express'; | 
					
						
							|  |  |  | import {promisify} from 'util'; | 
					
						
							| 
									
										
										
										
											2018-08-15 13:47:45 +01:00
										 |  |  | import {PreviewServerError} from './preview-error'; | 
					
						
							| 
									
										
										
										
											2018-05-10 13:56:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Update the response to report that an error has occurred. | 
					
						
							|  |  |  |  * @param res The response to configure as an error. | 
					
						
							|  |  |  |  * @param err The error that needs to be reported. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-10 11:10:22 +01:00
										 |  |  | export async function respondWithError(res: express.Response, err: any): Promise<void> { | 
					
						
							| 
									
										
										
										
											2018-08-15 13:47:45 +01:00
										 |  |  |   if (!(err instanceof PreviewServerError)) { | 
					
						
							|  |  |  |     err = new PreviewServerError(500, String((err && err.message) || err)); | 
					
						
							| 
									
										
										
										
											2018-05-10 13:56:07 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   res.status(err.status); | 
					
						
							|  |  |  |   await promisify(res.end.bind(res))(err.message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Throw an exception that describes the given error information. | 
					
						
							|  |  |  |  * @param status The HTTP status code include in the error. | 
					
						
							|  |  |  |  * @param error The error message to include in the error. | 
					
						
							|  |  |  |  * @param req The request that triggered this error. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export function throwRequestError(status: number, error: string, req: express.Request): never { | 
					
						
							|  |  |  |   const message = `${error} in request: ${req.method} ${req.originalUrl}` + | 
					
						
							|  |  |  |                   (!req.body ? '' : ` ${JSON.stringify(req.body)}`); | 
					
						
							| 
									
										
										
										
											2018-08-15 13:47:45 +01:00
										 |  |  |   throw new PreviewServerError(status, message); | 
					
						
							| 
									
										
										
										
											2018-05-10 13:56:07 +01:00
										 |  |  | } |