({
err,
res,
callback,
silent = false,
statusHeader = 'crash',
statusOverride = 500,
}: {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
err: Error | any;
res: express.Response | null;
callback?: Function;
silent?: boolean;
statusHeader?: string;
statusOverride?: number;
})
| 29 | * @param callback - A function to be called synchronously |
| 30 | */ |
| 31 | export function sendCrashResponse({ |
| 32 | err, |
| 33 | res, |
| 34 | callback, |
| 35 | silent = false, |
| 36 | statusHeader = 'crash', |
| 37 | statusOverride = 500, |
| 38 | }: { |
| 39 | // eslint-disable-next-line @typescript-eslint/no-explicit-any |
| 40 | err: Error | any; |
| 41 | res: express.Response | null; |
| 42 | callback?: Function; |
| 43 | silent?: boolean; |
| 44 | statusHeader?: string; |
| 45 | statusOverride?: number; |
| 46 | }) { |
| 47 | if (!silent) { |
| 48 | console.error(err.stack || err); |
| 49 | } |
| 50 | |
| 51 | // If user function has already sent response headers, the response with |
| 52 | // error message cannot be sent. This check is done inside the callback, |
| 53 | // right before sending the response, to make sure that no concurrent |
| 54 | // execution sends the response between the check and 'send' call below. |
| 55 | if (res && !res.headersSent) { |
| 56 | res.set(FUNCTION_STATUS_HEADER_FIELD, statusHeader); |
| 57 | |
| 58 | if (process.env.NODE_ENV !== 'production') { |
| 59 | res.status(statusOverride); |
| 60 | res.send((err.message || err) + ''); |
| 61 | } else { |
| 62 | res.sendStatus(statusOverride); |
| 63 | } |
| 64 | } |
| 65 | if (callback) { |
| 66 | callback(); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | export function loggingHandlerAddExecutionContext() { |
| 71 | interceptStdoutWrite(); |
no test coverage detected