import { Server } from 'http'; import logger from '@/logger'; export type GetExitHandlerOptions = { coredump: false; timeout: 500; }; export type ExitHandler = ( code: number, reason: string ) => (err: unknown | undefined) => void; export const getExitHandler = ( server: Server, options: GetExitHandlerOptions ): ExitHandler => { // Exit function const exit = (code: number) => () => { options.coredump ? process.abort() : process.exit(code); }; return (code, reason) => (err) => { logger.error(`Exit from reason: ${reason}`); if (err && err instanceof Error) { // Log error information, use a proper logging library here :) logger.error(err.message, err.stack); } // Attempt a graceful shutdown, with timeout server.close(exit(code)); setTimeout(exit(code), options.timeout).unref(); }; };