'use strict'; const path = require('path'); const request = require('request'); const progress = require('request-progress'); const source = require('vinyl-source-stream'); const gutil = require('gulp-util'); module.exports = (url) => { const name = path.basename(url); let stream = null; return stream = progress(request({url: url, encoding: null}, function(error, response, body) { try { if (error) throw error; if (response.statusCode !== 200) throw `${response.statusCode} ${response.statusMessage}`; } catch (e) { this.emit('error', new gutil.PluginError({plugin: 'download', message: e})); } })) .on('error', (e) => stream.emit('error', e)) .on('progress', (p) => stream.emit('progress', p)) .pipe(source(name)); };