34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.onBeforeExit = exports.wait = exports.execFile = exports.exec = void 0;
|
|
const cp = require("child_process");
|
|
const Debug = require("debug");
|
|
const util = require("util");
|
|
const fn_1 = require("./fn");
|
|
const debug = Debug('native-run:utils:process');
|
|
exports.exec = util.promisify(cp.exec);
|
|
exports.execFile = util.promisify(cp.execFile);
|
|
exports.wait = util.promisify(setTimeout);
|
|
const exitQueue = [];
|
|
function onBeforeExit(fn) {
|
|
exitQueue.push(fn);
|
|
}
|
|
exports.onBeforeExit = onBeforeExit;
|
|
const BEFORE_EXIT_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP', 'SIGBREAK'];
|
|
const beforeExitHandlerWrapper = (signal) => (0, fn_1.once)(async () => {
|
|
debug('onBeforeExit handler: %s received', signal);
|
|
debug('onBeforeExit handler: running %s queued functions', exitQueue.length);
|
|
for (const [i, fn] of exitQueue.entries()) {
|
|
try {
|
|
await fn();
|
|
}
|
|
catch (e) {
|
|
debug('Error from function %d in exit queue: %O', i, e);
|
|
}
|
|
}
|
|
debug('onBeforeExit handler: exiting (exit code %s)', process.exitCode ? process.exitCode : 0);
|
|
process.exit();
|
|
});
|
|
for (const signal of BEFORE_EXIT_SIGNALS) {
|
|
process.on(signal, beforeExitHandlerWrapper(signal));
|
|
}
|