mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-16 21:56:25 -05:00
turning uplink requests into streams
This commit is contained in:
parent
d7eb7c9ef8
commit
dfd0459c03
4 changed files with 37 additions and 16 deletions
|
@ -83,7 +83,6 @@ module.exports = function(config_hash) {
|
||||||
return next(err);
|
return next(err);
|
||||||
});
|
});
|
||||||
res.header('content-type', 'application/octet-stream');
|
res.header('content-type', 'application/octet-stream');
|
||||||
stream.on('data', console.log);// rstream.pipe(stream);
|
|
||||||
stream.pipe(res);
|
stream.pipe(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,7 @@ Storage.prototype.update_versions = function(name, newdata, callback) {
|
||||||
// we do NOT overwrite any existing records
|
// we do NOT overwrite any existing records
|
||||||
if (url != null && data._distfiles[url.filename] == null) {
|
if (url != null && data._distfiles[url.filename] == null) {
|
||||||
data._distfiles[url.filename] = {
|
data._distfiles[url.filename] = {
|
||||||
url: verdata.dist.tarball,
|
url: verdata.dist.__sinopia_orig_tarball || verdata.dist.tarball,
|
||||||
prefix: url.protocol + '//' + url.host + url.prepath,
|
|
||||||
sha: verdata.dist.shasum,
|
sha: verdata.dist.shasum,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
var request = require('request');
|
var request = require('request');
|
||||||
|
var through = require('through');
|
||||||
var UError = require('./error').UserError;
|
var UError = require('./error').UserError;
|
||||||
var URL = require('url');
|
var URL = require('url');
|
||||||
|
|
||||||
|
@ -11,11 +12,13 @@ function Storage(config, mainconfig) {
|
||||||
this.url = URL.parse(this.config.url);
|
this.url = URL.parse(this.config.url);
|
||||||
if (this.url.hostname === 'registry.npmjs.org') {
|
if (this.url.hostname === 'registry.npmjs.org') {
|
||||||
this.ca = require('./npmsslkeys');
|
this.ca = require('./npmsslkeys');
|
||||||
if (this.config._autogenerated) {
|
|
||||||
|
// npm registry is too slow working with ssl :(
|
||||||
|
/*if (this.config._autogenerated) {
|
||||||
// encrypt all the things!
|
// encrypt all the things!
|
||||||
this.url.protocol = 'https';
|
this.url.protocol = 'https';
|
||||||
this.config.url = URL.format(this.url);
|
this.config.url = URL.format(this.url);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
this.config.url = this.config.url.replace(/\/$/, '');
|
this.config.url = this.config.url.replace(/\/$/, '');
|
||||||
|
@ -27,7 +30,7 @@ Storage.prototype.can_fetch_url = function(url) {
|
||||||
|
|
||||||
return url.protocol === this.url.protocol
|
return url.protocol === this.url.protocol
|
||||||
&& url.host === this.url.host
|
&& url.host === this.url.host
|
||||||
&& url.path === this.url.path
|
&& url.path.indexOf(this.url.path) === 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Storage.prototype.get_package = function(name, callback) {
|
Storage.prototype.get_package = function(name, callback) {
|
||||||
|
@ -53,27 +56,47 @@ Storage.prototype.get_package = function(name, callback) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Storage.prototype.get_tarball = function(name, filename, callback) {
|
Storage.prototype.get_tarball = function(name, filename) {
|
||||||
request({
|
return this.get_url(this.config.url + '/' + name + '/-/' + filename);
|
||||||
url: this.config.url + '/' + name + '/-/' + filename,
|
}
|
||||||
|
|
||||||
|
Storage.prototype.get_url = function(url) {
|
||||||
|
var stream = through(function(data) {
|
||||||
|
this.queue(data);
|
||||||
|
}, function() {
|
||||||
|
this.queue(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
var rstream = request({
|
||||||
|
url: url,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': this.ua,
|
'User-Agent': this.ua,
|
||||||
},
|
},
|
||||||
ca: this.ca,
|
ca: this.ca,
|
||||||
encoding: null,
|
encoding: null,
|
||||||
}, function(err, res, body) {
|
});
|
||||||
if (err) return callback(err);
|
|
||||||
|
rstream.on('response', function(res) {
|
||||||
if (res.statusCode === 404) {
|
if (res.statusCode === 404) {
|
||||||
return callback(new UError({
|
return stream.emit('error', new UError({
|
||||||
msg: 'file doesn\'t exist on uplink',
|
msg: 'file doesn\'t exist on uplink',
|
||||||
status: 404,
|
status: 404,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (!(res.statusCode >= 200 && res.statusCode < 300)) {
|
if (!(res.statusCode >= 200 && res.statusCode < 300)) {
|
||||||
return callback(new Error('bad status code: ' + res.statusCode));
|
return stream.emit('error', new UError({
|
||||||
|
msg: 'bad uplink status code: ' + res.statusCode,
|
||||||
|
status: 500,
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
callback(null, body);
|
|
||||||
|
rstream.pipe(stream);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
rstream.on('error', function(err) {
|
||||||
|
stream.emit('error', err);
|
||||||
|
});
|
||||||
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Storage;
|
module.exports = Storage;
|
||||||
|
|
|
@ -108,12 +108,12 @@ Storage.prototype.get_tarball = function(name, filename, callback) {
|
||||||
}
|
}
|
||||||
if (uplink == null) {
|
if (uplink == null) {
|
||||||
uplink = new Proxy({
|
uplink = new Proxy({
|
||||||
url: file.prefix,
|
url: file.url,
|
||||||
_autogenerated: true,
|
_autogenerated: true,
|
||||||
}, self.config);
|
}, self.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
var rstream2 = uplink.get_tarball(name, filename);
|
var rstream2 = uplink.get_url(file.url);
|
||||||
rstream2.on('error', function(err) {
|
rstream2.on('error', function(err) {
|
||||||
stream.emit('error', err);
|
stream.emit('error', err);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue