Skip to content

shinnn/cancelable-pipeline

Repository files navigation

cancelable-pipeline

npm version Build Status codecov

Cancelable stream.pipeline()

const {createReadStream, createWriteStream, promises: {stat}} = require('fs');
const cancelablePipeline = require('cancelable-pipeline');

cancelablePipeline(createReadStream('1GB-file.txt'), createWriteStream('dest0'), async () => {
  (await stat('dest0')).size; //=> 1000000000;
});

const cancel = cancelablePipeline(createReadStream('1GB-file.txt'), createWriteStream('dest1'), async () => {
  (await stat('dest1')).size; //=> 263192576, or something else smaller than 1000000000
});

setTimeout(() => cancel(), 1000);

Installation

Use npm.

npm install cancelable-pipeline

API

const cancelablePipeline = require('cancelable-pipeline');

cancelablePipeline(stream0 [, stream1, stream2, ...] [, callback])

stream0, stream1, stream2, ...: Stream
callback: Function
Return: Function

cancelablePipeline(streams [, callback])

streams: Stream[]
callback: Function
Return: Function

The API is almost the same as stream.pipeline(). The only difference is cancelable-pipeline returns a Function which destroys all the piped Streams without passing any errors to the callback.

const cancel = cancelablePipeline([src, transform, anotherTransform, dest], err => {
  err; //=> undefined
});

cancel();

License

ISC License © 2017 - 2019 Shinnosuke Watanabe