var msg = require('pako/lib/zlib/messages'); var zstream = require('pako/lib/zlib/zstream'); var zlib_deflate = require('pako/lib/zlib/deflate.js'); var zlib_inflate = require('pako/lib/zlib/inflate.js'); var constants = require('pako/lib/zlib/constants'); for (var key in constants) { exports[key] = constants[key]; } // zlib modes exports.NONE = 0; exports.DEFLATE = 1; exports.INFLATE = 2; exports.GZIP = 3; exports.GUNZIP = 4; exports.DEFLATERAW = 5; exports.INFLATERAW = 6; exports.UNZIP = 7; /** * Emulate Node's zlib C++ layer for use by the JS layer in index.js */ function Zlib(mode) { if (mode < exports.DEFLATE || mode > exports.UNZIP) throw new TypeError("Bad argument"); this.mode = mode; this.init_done = false; this.write_in_progress = false; this.pending_close = false; this.windowBits = 0; this.level = 0; this.memLevel = 0; this.strategy = 0; this.dictionary = null; } Zlib.prototype.init = function(windowBits, level, memLevel, strategy, dictionary) { this.windowBits = windowBits; this.level = level; this.memLevel = memLevel; this.strategy = strategy; // dictionary not supported. if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) this.windowBits += 16; if (this.mode === exports.UNZIP) this.windowBits += 32; if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) this.windowBits = -this.windowBits; this.strm = new zstream(); switch (this.mode) { case exports.DEFLATE: case exports.GZIP: case exports.DEFLATERAW: var status = zlib_deflate.deflateInit2( this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy ); break; case exports.INFLATE: case exports.GUNZIP: case exports.INFLATERAW: case exports.UNZIP: var status = zlib_inflate.inflateInit2( this.strm, this.windowBits ); break; default: throw new Error("Unknown mode " + this.mode); } if (status !== exports.Z_OK) { this._error(status); return; } this.write_in_progress = false; this.init_done = true; }; Zlib.prototype.params = function() { throw new Error("deflateParams Not supported"); }; Zlib.prototype._writeCheck = function() { if (!this.init_done) throw new Error("write before init"); if (this.mode === exports.NONE) throw new Error("already finalized"); if (this.write_in_progress) throw new Error("write already in progress"); if (this.pending_close) throw new Error("close is pending"); }; Zlib.prototype.write = function(flush, input, in_off, in_len, out, out_off, out_len) { this._writeCheck(); this.write_in_progress = true; var self = this; process.nextTick(function() { self.write_in_progress = false; var res = self._write(flush, input, in_off, in_len, out, out_off, out_len); self.callback(res[0], res[1]); if (self.pending_close) self.close(); }); return this; }; // set method for Node buffers, used by pako function bufferSet(data, offset) { for (var i = 0; i < data.length; i++) { this[offset + i] = data[i]; } } Zlib.prototype.writeSync = function(flush, input, in_off, in_len, out, out_off, out_len) { this._writeCheck(); return this._write(flush, input, in_off, in_len, out, out_off, out_len); }; Zlib.prototype._write = function(flush, input, in_off, in_len, out, out_off, out_len) { this.write_in_progress = true; if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) { throw new Error("Invalid flush value"); } if (input == null) { input = new Buffer(0); in_len = 0; in_off = 0; } if (out._set) out.set = out._set; else out.set = bufferSet; var strm = this.strm; strm.avail_in = in_len; strm.input = input; strm.next_in = in_off; strm.avail_out = out_len; strm.output = out; strm.next_out = out_off; switch (this.mode) { case exports.DEFLATE: case exports.GZIP: case exports.DEFLATERAW: var status = zlib_deflate.deflate(strm, flush); break; case exports.UNZIP: case exports.INFLATE: case exports.GUNZIP: case exports.INFLATERAW: var status = zlib_inflate.inflate(strm, flush); break; default: throw new Error("Unknown mode " + this.mode); } if (status !== exports.Z_STREAM_END && status !== exports.Z_OK) { this._error(status); } this.write_in_progress = false; return [strm.avail_in, strm.avail_out]; }; Zlib.prototype.close = function() { if (this.write_in_progress) { this.pending_close = true; return; } this.pending_close = false; if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) { zlib_deflate.deflateEnd(this.strm); } else { zlib_inflate.inflateEnd(this.strm); } this.mode = exports.NONE; }; Zlib.prototype.reset = function() { switch (this.mode) { case exports.DEFLATE: case exports.DEFLATERAW: var status = zlib_deflate.deflateReset(this.strm); break; case exports.INFLATE: case exports.INFLATERAW: var status = zlib_inflate.inflateReset(this.strm); break; } if (status !== exports.Z_OK) { this._error(status); } }; Zlib.prototype._error = function(status) { this.onerror(msg[status] + ': ' + this.strm.msg, status); this.write_in_progress = false; if (this.pending_close) this.close(); }; exports.Zlib = Zlib;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19553 | swellard | Move and rename clients | ||
//guest/perforce_software/helix-web-services/main/source/clients/2016.1.0/javascript/node_modules/browserify-zlib/src/binding.js | |||||
#1 | 18810 | tjuricek |
First-pass at JavaScript client SDK. JavaScript requires Node with Gulp to "browserfy" the library. It's the easiest way I found to use the swagger-js project; bundle up a wrapping method. There is no JavaScript reference guide. The swagger-js doesn't really document what they do very well, actually. Overall I'm not particularly impressed by swagger-js, it was hard to even figure out what the right method syntax was. We may want to invest time in doing it better. This required setting CORS response headers, which are currently defaulted to a fairly insecure setting. |