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
						
					
					
				| /**
 | |
|  * 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);
 | |
| }; |