JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 94
  • Score
    100M100P100Q87501F
  • License WTFPL

Yet another POSIX signal handler.

Package Exports

  • @darkobits/adeiu
  • @darkobits/adeiu/dist/adeiu.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@darkobits/adeiu) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Yet another POSIX signal handler.

Features

  • Ensures provided functions are called before any other event listeners and are run concurrently, minimizing shutdown time.
  • Works with any combination of synchronous and asynchronous functions.
  • Ensures a clean exit if all functions resolve/return.
  • Exits with an error if any functions reject/throw.
  • Ensures processes exit cleanly, even when they have asynchronous shut-down functions and the Node debugger is in use. (See this issue)

Install

npm i @darkobits/adeiu

Use

Adeiu accepts an asynchronous or synchronous handler function. By default, the handler will be registered to respond to the following signals:

  • SIGINT
  • SIGQUIT
  • SIGTERM
  • SIGUSR2
import adeiu from '@darkobits/adeiu';

adeiu(async signal => {
  console.log(`Hey, we got ${signal}. Exiting...`);

  await someAsyncStuff();

  console.log('All done!');
});

// Un-register the callback.
annuler();

Unregistering Handlers

Adeiu returns a function that can be invoked to unregister a handler.

import adeiu from '@darkobits/adeiu';

const unregister = adeiu(() => {
  // Handler implementation here.
});

// Un-register the handler.
unregister();

Customizing Signals

Usually, responding to signals dynamically can be accomplished by inspecting the signal argument passed to your handler. However, if it is important that handlers are only installed on a particular signal, or if you'd like to respond to signals other than the defaults, you may optionally provide a custom array of signals as a second argument:

import adeiu from '@darkobits/adeiu';

// Register callback that will _only_ be invoked on SIGINT:
adeiu(() => {
  // SIGINT cleanup tasks.
}, ['SIGINT']);
import adeiu from '@darkobits/adeiu';

// Register callback with the default signals _and_ SIGUSR1:
adeiu(() => {
  // Custom cleanup tasks.
}, [...adeiu.SIGNALS, 'SIGUSR1']);