react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / browserify-zlib / src / binding.js
80728 viewsvar msg = require('pako/lib/zlib/messages');1var zstream = require('pako/lib/zlib/zstream');2var zlib_deflate = require('pako/lib/zlib/deflate.js');3var zlib_inflate = require('pako/lib/zlib/inflate.js');4var constants = require('pako/lib/zlib/constants');56for (var key in constants) {7exports[key] = constants[key];8}910// zlib modes11exports.NONE = 0;12exports.DEFLATE = 1;13exports.INFLATE = 2;14exports.GZIP = 3;15exports.GUNZIP = 4;16exports.DEFLATERAW = 5;17exports.INFLATERAW = 6;18exports.UNZIP = 7;1920/**21* Emulate Node's zlib C++ layer for use by the JS layer in index.js22*/23function Zlib(mode) {24if (mode < exports.DEFLATE || mode > exports.UNZIP)25throw new TypeError("Bad argument");2627this.mode = mode;28this.init_done = false;29this.write_in_progress = false;30this.pending_close = false;31this.windowBits = 0;32this.level = 0;33this.memLevel = 0;34this.strategy = 0;35this.dictionary = null;36}3738Zlib.prototype.init = function(windowBits, level, memLevel, strategy, dictionary) {39this.windowBits = windowBits;40this.level = level;41this.memLevel = memLevel;42this.strategy = strategy;43// dictionary not supported.4445if (this.mode === exports.GZIP || this.mode === exports.GUNZIP)46this.windowBits += 16;4748if (this.mode === exports.UNZIP)49this.windowBits += 32;5051if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW)52this.windowBits = -this.windowBits;5354this.strm = new zstream();5556switch (this.mode) {57case exports.DEFLATE:58case exports.GZIP:59case exports.DEFLATERAW:60var status = zlib_deflate.deflateInit2(61this.strm,62this.level,63exports.Z_DEFLATED,64this.windowBits,65this.memLevel,66this.strategy67);68break;69case exports.INFLATE:70case exports.GUNZIP:71case exports.INFLATERAW:72case exports.UNZIP:73var status = zlib_inflate.inflateInit2(74this.strm,75this.windowBits76);77break;78default:79throw new Error("Unknown mode " + this.mode);80}8182if (status !== exports.Z_OK) {83this._error(status);84return;85}8687this.write_in_progress = false;88this.init_done = true;89};9091Zlib.prototype.params = function() {92throw new Error("deflateParams Not supported");93};9495Zlib.prototype._writeCheck = function() {96if (!this.init_done)97throw new Error("write before init");9899if (this.mode === exports.NONE)100throw new Error("already finalized");101102if (this.write_in_progress)103throw new Error("write already in progress");104105if (this.pending_close)106throw new Error("close is pending");107};108109Zlib.prototype.write = function(flush, input, in_off, in_len, out, out_off, out_len) {110this._writeCheck();111this.write_in_progress = true;112113var self = this;114process.nextTick(function() {115self.write_in_progress = false;116var res = self._write(flush, input, in_off, in_len, out, out_off, out_len);117self.callback(res[0], res[1]);118119if (self.pending_close)120self.close();121});122123return this;124};125126// set method for Node buffers, used by pako127function bufferSet(data, offset) {128for (var i = 0; i < data.length; i++) {129this[offset + i] = data[i];130}131}132133Zlib.prototype.writeSync = function(flush, input, in_off, in_len, out, out_off, out_len) {134this._writeCheck();135return this._write(flush, input, in_off, in_len, out, out_off, out_len);136};137138Zlib.prototype._write = function(flush, input, in_off, in_len, out, out_off, out_len) {139this.write_in_progress = true;140141if (flush !== exports.Z_NO_FLUSH &&142flush !== exports.Z_PARTIAL_FLUSH &&143flush !== exports.Z_SYNC_FLUSH &&144flush !== exports.Z_FULL_FLUSH &&145flush !== exports.Z_FINISH &&146flush !== exports.Z_BLOCK) {147throw new Error("Invalid flush value");148}149150if (input == null) {151input = new Buffer(0);152in_len = 0;153in_off = 0;154}155156if (out._set)157out.set = out._set;158else159out.set = bufferSet;160161var strm = this.strm;162strm.avail_in = in_len;163strm.input = input;164strm.next_in = in_off;165strm.avail_out = out_len;166strm.output = out;167strm.next_out = out_off;168169switch (this.mode) {170case exports.DEFLATE:171case exports.GZIP:172case exports.DEFLATERAW:173var status = zlib_deflate.deflate(strm, flush);174break;175case exports.UNZIP:176case exports.INFLATE:177case exports.GUNZIP:178case exports.INFLATERAW:179var status = zlib_inflate.inflate(strm, flush);180break;181default:182throw new Error("Unknown mode " + this.mode);183}184185if (status !== exports.Z_STREAM_END && status !== exports.Z_OK) {186this._error(status);187}188189this.write_in_progress = false;190return [strm.avail_in, strm.avail_out];191};192193Zlib.prototype.close = function() {194if (this.write_in_progress) {195this.pending_close = true;196return;197}198199this.pending_close = false;200201if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {202zlib_deflate.deflateEnd(this.strm);203} else {204zlib_inflate.inflateEnd(this.strm);205}206207this.mode = exports.NONE;208};209210Zlib.prototype.reset = function() {211switch (this.mode) {212case exports.DEFLATE:213case exports.DEFLATERAW:214var status = zlib_deflate.deflateReset(this.strm);215break;216case exports.INFLATE:217case exports.INFLATERAW:218var status = zlib_inflate.inflateReset(this.strm);219break;220}221222if (status !== exports.Z_OK) {223this._error(status);224}225};226227Zlib.prototype._error = function(status) {228this.onerror(msg[status] + ': ' + this.strm.msg, status);229230this.write_in_progress = false;231if (this.pending_close)232this.close();233};234235exports.Zlib = Zlib;236237238