New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@purinton/signals

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@purinton/signals

Graceful shutdown signal handler utility for Node.js (ESM and CommonJS)

latest
Source
npmnpm
Version
1.0.15
Version published
Maintainers
1
Created
Source

Purinton Dev

@purinton/signals npm versionlicensebuild status

Graceful shutdown signal handler utility for Node.js (ESM and CommonJS)

Table of Contents

Features

  • Register handlers for process signals (e.g., SIGTERM, SIGINT, SIGHUP)
  • Register async shutdown hooks to run on signal or process exit
  • Customizable logger and process object
  • Simple API for both ESM and CommonJS
  • TypeScript type definitions included
  • Well-tested with Jest

Installation

npm install @purinton/signals

Usage

ESM Example

import log from '@purinton/log';
import registerSignals from '@purinton/signals'; // Default export
// or: import { registerSignals } from '@purinton/signals';
const { shutdown, getShuttingDown } = registerSignals({ log });

CommonJS Example

const log = require('@purinton/log');
const registerSignals = require('@purinton/signals'); // Default export
// or: const { registerSignals } = require('@purinton/signals');
const { shutdown, getShuttingDown } = registerSignals({ log });

Shutdown Hooks Example

You can call registerSignals multiple times to add async shutdown hooks. All hooks will be run (in order of registration) when a signal is received or the process exits (via exit or beforeExit).

// Simulate a resource that needs cleanup (e.g., database connection)
const fakeDb = {
  close: async () => {
    return new Promise(resolve => setTimeout(() => {
      log.info('Fake DB connection closed');
      resolve();
    }, 100));
  }
};

// Register signal handlers
registerSignals({ log });

// Add shutdown hook for closing the fake DB connection
registerSignals({
  log,
  shutdownHook: async (signal) => {
    await fakeDb.close();
    log.info(`Cleanup complete on ${signal}`);
  }
});

Note: Both the default export and named export registerSignals are available in both ESM and CommonJS.

API

registerSignals(options?)

Registers shutdown handlers for the specified signals and allows registering async shutdown hooks.

Options

  • processObj (default: process): The process object to attach handlers to.
  • log (default: @purinton/log): Logger for output. Should have debug, info, warn, and error methods.
  • signals (default: [ 'SIGTERM', 'SIGINT', 'SIGHUP' ]): Array of signals to listen for.
  • shutdownHook (optional): An async function to run during shutdown. You can call registerSignals multiple times to add multiple hooks.

Returns

An object with:

  • shutdown(signal: string): Promise<void> — Manually trigger shutdown logic.
  • getShuttingDown(): boolean — Returns whether shutdown is in progress.

Shutdown hooks will run on signal, process.exit, or beforeExit.

TypeScript

Type definitions are included:

import registerSignals, { RegisterSignalsOptions } from '@purinton/signals';

// Optionally provide options
const options: RegisterSignalsOptions = {
  processObj: process, // optional, defaults to process
  log: myLogger,       // optional, defaults to @purinton/log
  signals: ['SIGTERM', 'SIGINT', 'SIGHUP'], // optional, defaults as shown
  shutdownHook: async (signal) => { /* ... */ } // optional
};

const { shutdown, getShuttingDown } = registerSignals(options);

// Types:
// interface RegisterSignalsOptions {
//   processObj?: NodeJS.Process;
//   log?: typeof log;
//   signals?: string[];
//   shutdownHook?: (signal: string) => Promise<void>;
// }
//
// function registerSignals(options?: RegisterSignalsOptions): {
//   shutdown: (signal: string) => Promise<void>;
//   getShuttingDown: () => boolean;
// };

Support

For help, questions, or to chat with the author and community, visit:

DiscordPurinton Dev

Purinton Dev on Discord

License

MIT © 2025 Russell Purinton

Keywords

nodejs

FAQs

Package last updated on 11 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts