'use strict'; var objectAssign = require('object-assign'); var chalk = require('chalk'); var lpadAlign = require('lpad-align'); var Progress = require('progress'); module.exports = function (opts) { opts = opts || {}; opts.stream = opts.stream || process.stderr; opts.indent = opts.indent || 2; var words = [ 'fetch', 'progress' ]; var progress = chalk.cyan(lpadAlign('progress', words, opts.indent)); var str = progress + ' : [:bar] :percent :etas'; var bar = new Progress(str, objectAssign({ complete: '=', incomplete: ' ', width: 20, total: 0 }, opts)); var streams = 0; return function (res, url, cb) { if (!res.headers['content-length'] || !opts.stream.isTTY) { cb(); return; } streams ++; bar.total += parseInt(res.headers['content-length'], 10); var fetch = chalk.cyan(lpadAlign('fetch', words, opts.indent)); opts.stream.clearLine(); opts.stream.cursorTo(0); opts.stream.write(fetch + ' : ' + url + '\n'); res.on('data', function (data) { bar.tick(data.length); }); res.on('end', function () { if (--streams === 0) { opts.stream.write('\n'); } cb(); }); }; };