You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					117 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					117 lines
				
				2.7 KiB
			| 
											2 years ago
										 | /** | ||
|  |  * node-compress-commons | ||
|  |  * | ||
|  |  * Copyright (c) 2014 Chris Talkington, contributors. | ||
|  |  * Licensed under the MIT license. | ||
|  |  * https://github.com/archiverjs/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; | ||
|  |   this._archive = { | ||
|  |     finish: false, | ||
|  |     finished: false, | ||
|  |     processing: false | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | 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._normalizeEntry = 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._normalizeEntry(ae); | ||
|  |   this._entry = ae; | ||
|  | 
 | ||
|  |   source = util.normalizeInputSource(source); | ||
|  | 
 | ||
|  |   if (Buffer.isBuffer(source)) { | ||
|  |     this._appendBuffer(ae, source, callback); | ||
|  |   } else if (util.isStream(source)) { | ||
|  |     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); | ||
|  | }; |