UNPKG

npm-run-all2

Version:

A CLI tool to run multiple npm-scripts in parallel or sequential. (Maintenance fork)

72 lines (61 loc) 2 kB
/** * @module spawn-posix * @author Toru Nagashima * @copyright 2015 Toru Nagashima. All rights reserved. * @copyright 2026 Bret Comnes. All rights reserved. * See LICENSE file in root directory for full license. * * @import { ChildProcess, SpawnOptions } from 'node:child_process' */ // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ import crossSpawn from 'cross-spawn' import getDescendentProcessInfo from 'pidtree' // ------------------------------------------------------------------------------ // Helpers // ------------------------------------------------------------------------------ /** * Kills the new process and its sub processes. * @this {ChildProcess} * @returns {boolean} */ function kill () { if (this.pid == null) { return false } getDescendentProcessInfo(this.pid, { root: true }, (/** @type {Error | undefined} */ err, /** @type {number[]} */ pids) => { if (err) { return } for (const pid of pids) { try { process.kill(pid) } catch (_err) { // ignore. } } }) return true } // ------------------------------------------------------------------------------ // Public Interface // ------------------------------------------------------------------------------ /** * Launches a new process with the given command. * This is almost same as `child_process.spawn`. * * This returns a `ChildProcess` instance. * `kill` method of the instance kills the new process and its sub processes. * * @param {string} command - The command to run. * @param {string[]} args - List of string arguments. * @param {SpawnOptions} options - Options. * @returns {ChildProcess} A ChildProcess instance of new process. * @private */ export default function spawn (command, args, options) { const child = crossSpawn(command, args, options) child.kill = kill return child }