mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-11-13 03:35:52 +01:00
63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
let Stream = require('stream');
|
|
let Util = require('util');
|
|
|
|
module.exports.ReadTarballStream = ReadTarball;
|
|
module.exports.UploadTarballStream = UploadTarball;
|
|
|
|
//
|
|
// This stream is used to read tarballs from repository
|
|
//
|
|
function ReadTarball(options) {
|
|
let self = new Stream.PassThrough(options);
|
|
Object.setPrototypeOf(self, ReadTarball.prototype);
|
|
|
|
// called when data is not needed anymore
|
|
add_abstract_method(self, 'abort');
|
|
|
|
return self;
|
|
}
|
|
|
|
Util.inherits(ReadTarball, Stream.PassThrough);
|
|
|
|
//
|
|
// This stream is used to upload tarballs to a repository
|
|
//
|
|
function UploadTarball(options) {
|
|
let self = new Stream.PassThrough(options);
|
|
Object.setPrototypeOf(self, UploadTarball.prototype);
|
|
|
|
// called when user closes connection before upload finishes
|
|
add_abstract_method(self, 'abort');
|
|
|
|
// called when upload finishes successfully
|
|
add_abstract_method(self, 'done');
|
|
|
|
return self;
|
|
}
|
|
|
|
Util.inherits(UploadTarball, Stream.PassThrough);
|
|
|
|
//
|
|
// This function intercepts abstract calls and replays them allowing
|
|
// us to attach those functions after we are ready to do so
|
|
//
|
|
function add_abstract_method(self, name) {
|
|
self._called_methods = self._called_methods || {};
|
|
self.__defineGetter__(name, function() {
|
|
return function() {
|
|
self._called_methods[name] = true;
|
|
};
|
|
});
|
|
self.__defineSetter__(name, function(fn) {
|
|
delete self[name];
|
|
self[name] = fn;
|
|
if (self._called_methods && self._called_methods[name]) {
|
|
delete self._called_methods[name];
|
|
self[name]();
|
|
}
|
|
});
|
|
}
|
|
|