2.0.1 • Published 2 years ago

promised-spawn v2.0.1

Weekly downloads
1
License
BSD-3-Clause
Repository
github
Last release
2 years ago

promised-spawn

Build Status npm version Node.js Version

child_process.spawn + Promise API + live data chunks + merged output of stdout and stderr.

Installation

npm i promised-spawn

Usage

Simple echo command:

import spawn from 'promised-spawn';

const output = await spawn('echo', ['a', 'b bb']);
/*
 output.stdout: 'a b bb'
*/

Merged output of stdio and stderr:

import spawn from 'promised-spawn';

const output = await spawn('<a long task>', [], { mergedOutput: true });
/*
 output.stdout:
 log1
 log2
 log3

 output.stderr:
 err1
 err2

 output.merged:
 log1
 err1
 log2
 err3
 log3
*/

Capture live data chunks:

import spawn from 'promised-spawn';

const out: Buffer[] = [];
const err: Buffer[] = [];
await spawn('<a long task>', [], {
  liveOutput: (chunk, type) => {
    if (type === 'stdout') {
      out.push(chunk);
    } else if (type === 'stderr') {
      err.push(chunk);
    }
  },
});

console.log(Buffer.concat(out).toString());
console.log(Buffer.concat(err).toString());

/*
 out:
 log1
 log2
 log3

 err:
 err1
 err2
*/

Handle errors:

import spawn, { SpawnError } from 'promised-spawn';

try {
  const output = await spawn('<a long task>', [], { mergedOutput: true });
} catch (err) {
  if (err instanceof SpawnError) {
    console.log(err.output);
    console.log(err.message);
  }
}
/*
 err.output.stdout:
 log1
 log2
 log3

 err.output.stderr:
 err1
 err2

 err.output.merged:
 log1
 err1
 log2
 err3
 log3

 err.message:
 Processed exited with code 1.
*/

API

export interface SpawnOptions {
  // Options passed to node spawn.
  spawnOptions?: SpawnOptionsWithoutStdio;
  // Used to capture live IO chunks.
  liveOutput?: (chunk: Buffer, source: 'stdout' | 'stderr') => void;
  // Whether merging stdio and stderr is enabled.
  // Once enabled, use `SpawnOutput.merge` to get merged output.
  mergedOutput?: boolean;
}

// Output of a spawn operation.
// If the spawn succeeded, it's returned as the result of promise.
// Otherwise, you can grab the output via `SpawnError.output`.
export interface SpawnOutput {
  // Output of stdout.
  stdout: string;
  // Output of stderr.
  stderr: string;
  // Merged output of stdio and stderr.
  // Only applicable when `SpawnOptions.mergedOutput` is true.
  merged: string;
}

// The error type when spawn promise is rejected.
export class SpawnError extends Error;

export default function spawnAsync(command: string, args?: string[], opts?: SpawnOptions);
2.0.1

2 years ago

2.0.0

2 years ago

1.0.0

6 years ago

0.0.1

8 years ago