/** | |
* node-compress-commons | |
* | |
* Copyright (c) 2014 Chris Talkington, contributors. | |
* Licensed under the MIT license. | |
* https://github.com/ctalkington/node-compress-commons/blob/master/LICENSE-MIT | |
*/ | |
var inherits = require('util').inherits; | |
var Transform = require('readable-stream').Transform; | |
var ArchiveEntry = require('./archive-entry'); | |
var util = require('../util'); | |
var ArchiveOutputStream = module.exports = function(options) { | |
if (!(this instanceof ArchiveOutputStream)) { | |
return new ArchiveOutputStream(options); | |
} | |
Transform.call(this, options); | |
this.offset = 0; | |
}; | |
inherits(ArchiveOutputStream, Transform); | |
ArchiveOutputStream.prototype._appendBuffer = function(zae, source, callback) { | |
// scaffold only | |
}; | |
ArchiveOutputStream.prototype._appendStream = function(zae, source, callback) { | |
// scaffold only | |
}; | |
ArchiveOutputStream.prototype._emitErrorCallback = function(err) { | |
if (err) { | |
this.emit('error', err); | |
} | |
}; | |
ArchiveOutputStream.prototype._finish = function(ae) { | |
// scaffold only | |
}; | |
ArchiveOutputStream.prototype._setDefaults = function(ae) { | |
// scaffold only | |
}; | |
ArchiveOutputStream.prototype._transform = function(chunk, encoding, callback) { | |
callback(null, chunk); | |
}; | |
ArchiveOutputStream.prototype.entry = function(ae, source, callback) { | |
source = source || null; | |
if (typeof callback !== 'function') { | |
callback = this._emitErrorCallback.bind(this); | |
} | |
if (!(ae instanceof ArchiveEntry)) { | |
callback(new Error('not a valid instance of ArchiveEntry')); | |
return; | |
} | |
if (this._archive.finish || this._archive.finished) { | |
callback(new Error('unacceptable entry after finish')); | |
return; | |
} | |
if (this._archive.processing) { | |
callback(new Error('already processing an entry')); | |
return; | |
} | |
this._archive.processing = true; | |
this._setDefaults(ae); | |
this._entry = ae; | |
source = util.normalizeInputSource(source); | |
if (Buffer.isBuffer(source)) { | |
this._appendBuffer(ae, source, callback); | |
} else if (util.isStream(source)) { | |
source.on('error', callback); | |
this._appendStream(ae, source, callback); | |
} else { | |
this._archive.processing = false; | |
callback(new Error('input source must be valid Stream or Buffer instance')); | |
return; | |
} | |
return this; | |
}; | |
ArchiveOutputStream.prototype.finish = function() { | |
if (this._archive.processing) { | |
this._archive.finish = true; | |
return; | |
} | |
this._finish(); | |
}; | |
ArchiveOutputStream.prototype.getBytesWritten = function() { | |
return this.offset; | |
}; | |
ArchiveOutputStream.prototype.write = function(chunk, cb) { | |
if (chunk) { | |
this.offset += chunk.length; | |
} | |
return Transform.prototype.write.call(this, chunk, cb); | |
}; |