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.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							86 lines
						
					
					
						
							2.3 KiB
						
					
					
				| "use strict";
 | |
| var USE_TYPEDARRAY = (typeof Uint8Array !== "undefined") && (typeof Uint16Array !== "undefined") && (typeof Uint32Array !== "undefined");
 | |
| 
 | |
| var pako = require("pako");
 | |
| var utils = require("./utils");
 | |
| var GenericWorker = require("./stream/GenericWorker");
 | |
| 
 | |
| var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array";
 | |
| 
 | |
| exports.magic = "\x08\x00";
 | |
| 
 | |
| /**
 | |
|  * Create a worker that uses pako to inflate/deflate.
 | |
|  * @constructor
 | |
|  * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate".
 | |
|  * @param {Object} options the options to use when (de)compressing.
 | |
|  */
 | |
| function FlateWorker(action, options) {
 | |
|     GenericWorker.call(this, "FlateWorker/" + action);
 | |
| 
 | |
|     this._pako = null;
 | |
|     this._pakoAction = action;
 | |
|     this._pakoOptions = options;
 | |
|     // the `meta` object from the last chunk received
 | |
|     // this allow this worker to pass around metadata
 | |
|     this.meta = {};
 | |
| }
 | |
| 
 | |
| utils.inherits(FlateWorker, GenericWorker);
 | |
| 
 | |
| /**
 | |
|  * @see GenericWorker.processChunk
 | |
|  */
 | |
| FlateWorker.prototype.processChunk = function (chunk) {
 | |
|     this.meta = chunk.meta;
 | |
|     if (this._pako === null) {
 | |
|         this._createPako();
 | |
|     }
 | |
|     this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @see GenericWorker.flush
 | |
|  */
 | |
| FlateWorker.prototype.flush = function () {
 | |
|     GenericWorker.prototype.flush.call(this);
 | |
|     if (this._pako === null) {
 | |
|         this._createPako();
 | |
|     }
 | |
|     this._pako.push([], true);
 | |
| };
 | |
| /**
 | |
|  * @see GenericWorker.cleanUp
 | |
|  */
 | |
| FlateWorker.prototype.cleanUp = function () {
 | |
|     GenericWorker.prototype.cleanUp.call(this);
 | |
|     this._pako = null;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Create the _pako object.
 | |
|  * TODO: lazy-loading this object isn't the best solution but it's the
 | |
|  * quickest. The best solution is to lazy-load the worker list. See also the
 | |
|  * issue #446.
 | |
|  */
 | |
| FlateWorker.prototype._createPako = function () {
 | |
|     this._pako = new pako[this._pakoAction]({
 | |
|         raw: true,
 | |
|         level: this._pakoOptions.level || -1 // default compression
 | |
|     });
 | |
|     var self = this;
 | |
|     this._pako.onData = function(data) {
 | |
|         self.push({
 | |
|             data : data,
 | |
|             meta : self.meta
 | |
|         });
 | |
|     };
 | |
| };
 | |
| 
 | |
| exports.compressWorker = function (compressionOptions) {
 | |
|     return new FlateWorker("Deflate", compressionOptions);
 | |
| };
 | |
| exports.uncompressWorker = function () {
 | |
|     return new FlateWorker("Inflate", {});
 | |
| };
 |