npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

child-process-toolbox

v3.0.4

Published

Helper functions to spawn and manage child processes, especially for writing shell utilities with Javascript / Typescript

Downloads

4

Readme

child-process-tools

Helper functions to spawn and manage child processes, especially for writing shell utilities with Javascript / Typescript

Usage

child_process = require('child_process')
tools = require('child-process-toolbox')
const child = child_process.spawn('bash',['-c','echo answer 42'])
// channel child process's stderr & stdout to the current process's stderr & stdout, so that 
// the spawned child process's output can be seen on console
tools.echoChildProcessOutput(child);
// wait for a pattern to be outputed from the child process's outputs (stderr & stdout)
const line = await tools.promiseOutputPattern(child, 'answer 24')
const line2 = await tools.promiseOutputPattern(child, /answer [0-9]{2}/)
const codeOrSignal = await tools.promiseKilled(child)

See unit test cases in "*.spec.ts" for example usages.

echoChildProcessOutput

This function watches the outputs from the child process and forward the outputs to the current process's outputs, so that the outputs of the child process can be observed from console. Useful for writing scripts that calls child_process.spawn() & wants the output be seen.

function echoChildProcessOutput(
  childProcess: child_process.ChildProcess, // child process returned from child_process.spawn()
  options: {
    parentProcess?: NodeJS.Process; // default the global 'process'
    outPrefix?: string; // prefix string before each line of output from stdout
    errPrefix?: string; // prefix string before each line from stderr
    echoStdout?: boolean; // default true
    echoStderr?: boolean; // default true
  } = {}
)

promiseOutputPattern

Returns a Promise that resolves when a line of output from child process matches the given pattern. This is useful when starts a service using child_process.spawn(), and wish to wait until a line of output indicating the service is ready (like listening on an address, etc.)

If the process exits or encounter an error before the expected output, the returned Promise will reject.

The resolved value is the line of output that matches the pattern.

/**
 * Return a Promise that resolves to a string (line of output) when a pattern to be outputed from the process's stdout or stderr
 * @param process
 * @param pattern - string or RegExp to match against the output
 * @param options - (optional) options
 *      - watchStdout
 *      - watchStderr
 *      - timeoutInMs - time in ms after which the Promise will be rejected
 *      - killProcessIfTimeout - when timeout, whether or not to kill the process before rejection
 */

promiseKilled

Kill the process and return a promise that resolves the string killSignal (normally 'SIGTERM') or a numerical code (unlikely, unless the process exists normally before get killed) on the process's "exit" event.

On "error" event of the process, the promise will be rejected.

Parameters: process: the child process to kill (like one returned from child_process.spawn) killSignal: optional, the signal to kill the child process, by default SIGTERM

export async function promiseKilled(
  process: ChildProcess,
  signal?: number | NodeJS.Signals
): Promise<number | NodeJS.Signals> 

Usage example:

const child = child_process.spawn('bash', [
  '-c',
  'echo THE answer is...;sleep 1000000000000000;echo 42'
]);
const signal = await promiseKilled(child);