graceful-hook

1.0.3 • Public • Published

graceful-hook

This module is somewhat a merge of Exit-Hook and Signal-Exit.

This is because exit-hook does not cover all exit signals although with a little editing, I found that it better handles multiple hooks and waiting for asynchronous processes to end, something that signal-exit wasn't very good at.

Moreover, exit-hook wonderfully handles pm2 exits.

This module is thus the best of both worlds.

Here are some of the things it does differently:

  • Returns the signal to callback function unlike exit-hook
  • Tries to handle async callbacks, including waiting for them to resolve
  • Includes all the signals that are handled by signal-exit and not exit-hook
  • Handles pm2 shutdown messages as handled by exit-hook and not signal-exit
  • Adds an ignore option to ensure certain signals can be ignored. This fine grained signal handling is important to ensure the hook plays well with tools like Nodemon.

Install

$ npm install graceful-hook

Usage

const gracefulHook = require('graceful-hook');

// Hook with option to ignore some signals
gracefulHook(async (signal, signalNum) => {
	console.log(`${signal} received`);
	console.log('Exiting with after some async process...');

    await longAsyncProcess();

}, {ignore:['SIGUSR2']});

// You can add multiple hooks, even across files
gracefulHook(() => {
	console.log('Exiting 2');
});

throw new Error('🦄');

API

gracefulHook(callbackFn, [options]);

Options

  • ignore : Array of signals to ignore.

    This is important when using tools like Nodemon that will restart the process on change, not because the process is actually exiting. Nodemon for example will exit with the signal 'SIGUSR2' so you can ignore that.

Package Sidebar

Install

npm i graceful-hook

Weekly Downloads

0

Version

1.0.3

License

MIT

Unpacked Size

6.25 kB

Total Files

4

Last publish

Collaborators

  • nguru