All files / lib/stream promises.js

100% Statements 53/53
100% Branches 11/11
100% Functions 3/3
100% Lines 53/53

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 5417x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 10x 10x 10x 10x 10x 10x 10x 5x 5x 5x 5x 10x 10x 10x 5x 5x 5x 5x 10x 10x 10x 17x 6x 6x 6x 6x 3x 3x 3x 3x 6x 6x 6x 17x 17x 17x 17x 17x  
'use strict';
 
const {
  ArrayPrototypePop,
  Promise,
} = primordials;
 
const {
  isIterable,
  isNodeStream,
} = require('internal/streams/utils');
 
const { pipelineImpl: pl } = require('internal/streams/pipeline');
const eos = require('internal/streams/end-of-stream');
 
function pipeline(...streams) {
  return new Promise((resolve, reject) => {
    let signal;
    let end;
    const lastArg = streams[streams.length - 1];
    if (lastArg && typeof lastArg === 'object' &&
        !isNodeStream(lastArg) && !isIterable(lastArg)) {
      const options = ArrayPrototypePop(streams);
      signal = options.signal;
      end = options.end;
    }
 
    pl(streams, (err, value) => {
      if (err) {
        reject(err);
      } else {
        resolve(value);
      }
    }, { signal, end });
  });
}
 
function finished(stream, opts) {
  return new Promise((resolve, reject) => {
    eos(stream, opts, (err) => {
      if (err) {
        reject(err);
      } else {
        resolve();
      }
    });
  });
}
 
module.exports = {
  finished,
  pipeline,
};