JSPM

fallback-stream

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 69
  • Score
    100M100P100Q71587F

Create a readable stream that swithes to the fallback on error

Package Exports

  • fallback-stream

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fallback-stream) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

fallback-stream

Build Status Build status Coverage Status Dependency Status devDependency Status

Create a readable stream that swithes to the fallback on error

var fs = require('fs');
var fallbackStream = require('fallback-stream');

fallbackStream([
  fs.cresteReadStream('foo.txt'), // foo.txt doesn't exist
  fs.cresteReadStream('bar.txt'), // bar.txt: 'Hello!'
  fs.cresteReadStream('baz.txt')  // baz.txt doesn't exist
])
  .pipe(process.stdout); // yields 'Hello!'

Installation

NPM version

Use npm.

npm install fallback-stream

API

var fallbackStream = require('fallback-stream');

fallbackStream(array, [, options])

array: Array of Object (stream.Readable) or Function (directly passed to multistream)
options: Object, Function or RegExp
Return: Object (stream.Readable)

It returns a readable stream. When the first stream emits an error, the next one starts, and so on until one of the stream ends successfully. In other words, when the one of the streams ended, the rest won't be used.

var fs = require('fs');
var fallbackStream = require('fallback-stream');

var firstStream = fs.createReadStream('path/to/file/foo');

var fallback = fs.createReadStream('path/to/file/bar');

// a function that returns a readable stream
var fallbackFn = function() {
  return fs.createReadStream('path/to/file/baz');
};

fallbackStream([
  firstStream,
  fallback,
  fallbackFn
]);

options

The option object will be directly passed to stream.Readable options.

Additionally, fallback-stream accepts errorFilter option.

options.errorFilter

Type: Function or RegExp
Default: function() { return true }

Filter error objects that streams emit. If the filtering result is falsy, the created stream emits an error immediately and won't use the rest of streams.

var fallbackStream = require('fallback-stream');
var through = require('through2'); // npm install through2

function createErrorStream(err) {
  var stream = through();
  process.nextTick(function() {
    stream.emit('error', err);
  });
  return stream;
}


createStreams = function() {
  return [
    createErrorStream(new TypeError()),
    createErrorStream(new RangeError()),
    createErrorStream(new SyntaxError())
  ];
}

fallbackStream(createStreams(), {}).on('error', function(err) {
  err.name; //=> 'SyntaxError'
});

fallbackStream(createStreams(), {
  errorFilter: function(err) {
    return err.name === 'RangeError';
  }
}).on('error', function(err) {
  err.name; //=> 'TypeError'
});

fallbackStream(createStreams(), {
  errorFilter: /TypeError/
}).on('error', function(err) {
  err.name; //=> 'RangeError'
});

You can directly pass a Function or RegExp to the second argument to specify the error filter simply, instead of passing an object.

fallbackStream([/* streams */], /ENOENT/);

License

Copyright (c) 2014 Shinnosuke Watanabe

Licensed under the MIT License.