1.0.0 • Published 1 month ago

@silyze/async-process-stream v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
1 month ago

Async Process Stream

A duplex async stream wrapper for child processes with transform support and separate stderr handling.

Install

npm install @silyze/async-process-stream

Usage

Import and use it in your project:

import { spawnAsync } from "@silyze/async-process-stream";

const { stream } = spawnAsync("echo", ["Hello, World!"]);

const stdoutAbortController = new AbortController();
process.stdout.once("close", () => stdoutAbortController.abort());

stream
  .transform()
  .pipe(
    {
      async write(input) {
        await new Promise<void>((resolve, reject) => {
          process.stdout.write(input, (err) => (err ? reject(err) : resolve()));
        });
      },
    },
    { signal: stdoutAbortController.signal }
  )
  .then(() => process.exit(0));

This example runs the echo command and streams its stdout to the current process's stdout using AsyncTransform.pipe().

API

spawnAsync(path: string, args: string[], options?: SpawnOptionsWithoutStdio)

Spawns a child process and returns:

{
  stream: AsyncProcessStream,
  process: ChildProcess
}

class AsyncProcessStream implements AsyncStream<Buffer, Buffer>

  • read(signal?: AbortSignal): AsyncIterable<Buffer> – reads from stdout
  • write(input: Buffer): Promise<void> – writes to stdin
  • transform(): AsyncTransform<Buffer> – transforms stdout as a stream
  • error: AsyncReadStream<Buffer> – reads from stderr only