25 lines
849 B
JavaScript
25 lines
849 B
JavaScript
'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));
|
|
};
|
|
|