import gracefulShutdown from "./lib/http-graceful-shutdown.mjs"; export function getGracefulShutdownConfig() { return { disabled: !!process.env.NITRO_SHUTDOWN_DISABLED, signals: (process.env.NITRO_SHUTDOWN_SIGNALS || "SIGTERM SIGINT").split(" ").map((s) => s.trim()), timeout: Number.parseInt(process.env.NITRO_SHUTDOWN_TIMEOUT || "", 10) || 3e4, forceExit: !process.env.NITRO_SHUTDOWN_NO_FORCE_EXIT }; } export function setupGracefulShutdown(listener, nitroApp) { const shutdownConfig = getGracefulShutdownConfig(); if (shutdownConfig.disabled) { return; } gracefulShutdown(listener, { signals: shutdownConfig.signals.join(" "), timeout: shutdownConfig.timeout, forceExit: shutdownConfig.forceExit, onShutdown: async () => { await new Promise((resolve) => { const timeout = setTimeout(() => { console.warn("Graceful shutdown timeout, force exiting..."); resolve(); }, shutdownConfig.timeout); nitroApp.hooks.callHook("close").catch((error) => { console.error(error); }).finally(() => { clearTimeout(timeout); resolve(); }); }); } }); }