1.0.0 • Published 2 years ago

@giancosta86/flatten-transform v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

flatten-transform

Modern, configurable flattening stream

GitHub CI npm version MIT License

Overview

flatten-transform provides a FlattenTransform stream for NodeJS, flattening arrays and other iterables into a linear sequence of items - although the client can optionally set a maximum nesting level so as to constrain the recursive algorithm.

Like any other standard Transform object, the stream can be plugged into a pipeline, as well as manually controlled.

Installation

npm install @giancosta86/flatten-transform

or

yarn add @giancosta86/flatten-transform

Usage

Just create a new instance of FlattenTransform and use it in a pipeline, or call its standard methods like .write() .end(), .on(), ...

Example

This somehow contrived example still shows the simplicity of FlattenTransform as well as its support for pipelines and events - among the various stream features.

export async function recursiveFlatten(
  source: Iterable<unknown>
): Promise<unknown[]> {
  const linearResult: unknown[] = [];

  const flattenTransform = new FlattenTransform().on("data", item =>
    linearResult.push(item)
  );

  await pipeline(Readable.from(source), flattenTransform);

  return Promise.resolve(linearResult);
}

Constructor parameters

  • maxNestingLevel: a limit to the recursion performed by the flattening algorithm. The default value is Infinity - meaning that each and every iterable will be recursively flattened; in contrast, the minimum allowed value - 0 - will actually disable flattening, converting FlattenTransform to a pass-through stream

  • highWaterMark: if present, passed to the base constructor

  • signal: if present, passed to the base constructor

Further reference

For additional examples, please consult the unit tests in the source code repository.