@cutticat/shutdown
v3.0.3
Published
CuttiCat library for shutting down the application
Maintainers
Readme
@cutticat/shutdown
Library for registering graceful shutdown handlers in CuttiCat Node.js applications.
Contents
Overview
The library registers handlers for:
- Process signals (SIGINT, SIGTERM, SIGHUP by default)
- Uncaught exceptions (uncaughtException)
- Unhandled promise rejections (unhandledRejection)
When a signal or error is received, registered callbacks are invoked, their completion is awaited (with a timeout), and then the process exits with the appropriate exit code.
Installation
pnpm i @cutticat/shutdownQuick start
import { registerShutdown } from "@cutticat/shutdown"
const shutdown = registerShutdown({
onShutdown: async (options) => {
console.log("Shutting down...", options)
await closeDatabase()
await closeRedis()
},
logger: console,
timeout: 5000,
})
// Add additional handlers later
shutdown.onShutdown(async () => {
await flushLogs()
})API
registerShutdown(options)
Registers graceful shutdown handlers. Returns a RegisteredShutdown object.
Options:
onShutdown— callback invoked on shutdown (may be async)register— callback for registering additional handlers (e.g. for an HTTP server)logger— logger or logger factorysignals— list of signals (default["SIGINT", "SIGTERM", "SIGHUP"])timeout— timeout in ms (default 10000)uncaughtException— handle uncaughtException (default true)unhandledRejection— handle unhandledRejection (default true)
RegisteredShutdown
status— current status (waiting|disposed|shuttingDown)dispose()— unregisters handlers without performing shutdownshutdown(options)— initiates shutdownonShutdown(callback)— adds a callbackregister(callback)— registers a handler (receives the shutdown function)
shutdownDefaults
Default option values.
Documentation
Further documentation:
Full API documentation is available in JSDoc comments.
Important
It is recommended to call registerShutdown() once per process. Multiple calls create several sets of handlers for the same events; repeated shutdowns are ignored, but listeners remain until dispose() is called.
onShutdown callbacks are invoked in reverse registration order (LIFO): last registered first (e.g. closing the HTTP server), then earlier ones (DB pool, etc.). Unregister functions from register() on dispose() / shutdown completion also run in reverse order.
Requirements
- Node.js >= 22.0.0
- pnpm >= 10.17.0
- TypeScript >= 5.9.0
