npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

exit-hook2

v1.0.8

Published

Node.js cancellable exit-hooks

Downloads

51

Readme

Build Status node version npm version License

node-exit-hook

Node.js cancellable exit-hooks

Installation

npm install exit-hook2 --save

Usage

var exitHook = require('exit-hook2')

exitHook(function (canCancel, signal, code) {
    var allowShutdown = canCancel && false;
    
    return allowShutdown;
});
  • context An optional context for the 'callback' function. If undefined, the callback will have it's own context.
  • callback A function to execute when the application is exiting.
    • canCancel When true the exit can be cancelled by returning false.
    • signal Originating signal (if any).
    • code Exit code.

A full list of exit codes can be found here (new window).

Returning false terminates the shutdown sequence and stops the callback loop. If the shutdown cannot be cancelled ('canCancel' = false) the callback loop will not stop running.

If 'canCancel' is set to false then only synchronous code can execute. Any asynchronous operations WILL NOT RUN.

Graceful shutdown with asynchronous operations

exitHook(function (canCancel, signal, code) {
    if (canCancel) {
        exitHook.removeListener(this);
        
        server.close(function () {
            process.exit(code);
        });
        
        return false;
    }
});

exitHook.list

Returns an array with all the events currently listened to.

var list = exitHook.list(); // ['SIGINT', 'SIGTERM', 'SIGHUP', ...]

exitHook.bind

Binds a new event to treat as a shutdown signal.

exitHook.bind('CUSTOM1', true).list(); // ['SIGINT', 'SIGTERM', 'SIGHUP', 'CUSTOM1', ...]
  • signal Shutdown signal to listen for.
  • canCancel Boolean passed to the handlers signaling whether the shutdown can be cancelled.

exitHook.unbind

Unbinds a previously bound shutdown signal.

exitHook.unbind('CUSTOM1').list(); // ['SIGINT', 'SIGTERM', 'SIGHUP', ...]
exitHook.unbind('SIGTERM').list(); // ['SIGINT', 'SIGHUP', ...]
  • signal Shutdown signal to stop listening for. Pass "everything" to clear the module of all shutdown signals.

exitHook.removeListener

Removes a previously added shutdown listener.

exitHook(function () {
    performCleanup();
    
    // Make sure the cleanup script isn't executed multiple times
    exitHook.removeListener(this);
});

Custom events

// Let 'CUSTOM1' act as a cancellable shutdown signal
exitHook.bind('CUSTOM1', true);

exitHook(function (canCancel, signal, code) {
    canCancel; // true
    signal; // CUSTOM1
    code; // 128
    
    // Don't let the process terminate
    return false;
});

process.emit('CUSTOM1', 128);

License

MIT