diff --git a/binary.js b/binary.js index c20c91d..38a3578 100644 --- a/binary.js +++ b/binary.js @@ -17,39 +17,38 @@ var isBuf = require('./is-buffer'); * @api public */ -exports.deconstructPacket = function(packet){ +exports.deconstructPacket = function(packet) { var buffers = []; var packetData = packet.data; - - function _deconstructPacket(data) { - if (!data) return data; - - if (isBuf(data)) { - var placeholder = { _placeholder: true, num: buffers.length }; - buffers.push(data); - return placeholder; - } else if (isArray(data)) { - var newData = new Array(data.length); - for (var i = 0; i < data.length; i++) { - newData[i] = _deconstructPacket(data[i]); - } - return newData; - } else if (typeof data === 'object' && !(data instanceof Date)) { - var newData = {}; - for (var key in data) { - newData[key] = _deconstructPacket(data[key]); - } - return newData; - } - return data; - } - var pack = packet; - pack.data = _deconstructPacket(packetData); + pack.data = _deconstructPacket(packetData, buffers); pack.attachments = buffers.length; // number of binary 'attachments' return {packet: pack, buffers: buffers}; }; +function _deconstructPacket(data, buffers) { + if (!data) return data; + + if (isBuf(data)) { + var placeholder = { _placeholder: true, num: buffers.length }; + buffers.push(data); + return placeholder; + } else if (isArray(data)) { + var newData = new Array(data.length); + for (var i = 0; i < data.length; i++) { + newData[i] = _deconstructPacket(data[i], buffers); + } + return newData; + } else if (typeof data === 'object' && !(data instanceof Date)) { + var newData = {}; + for (var key in data) { + newData[key] = _deconstructPacket(data[key], buffers); + } + return newData; + } + return data; +} + /** * Reconstructs a binary packet from its placeholder packet and buffers * @@ -60,29 +59,28 @@ exports.deconstructPacket = function(packet){ */ exports.reconstructPacket = function(packet, buffers) { + packet.data = _reconstructPacket(packet.data, buffers); + packet.attachments = undefined; // no longer useful + return packet; +}; - function _reconstructPacket(data) { - if (data && data._placeholder) { - var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway) - return buf; - } else if (isArray(data)) { - for (var i = 0; i < data.length; i++) { - data[i] = _reconstructPacket(data[i]); - } - return data; - } else if (data && 'object' === typeof data) { - for (var key in data) { - data[key] = _reconstructPacket(data[key]); - } - return data; +function _reconstructPacket(data, buffers) { + if (!data) return data; + + if (data && data._placeholder) { + return buffers[data.num]; // appropriate buffer (should be natural order anyway) + } else if (isArray(data)) { + for (var i = 0; i < data.length; i++) { + data[i] = _reconstructPacket(data[i], buffers); + } + } else if (typeof data === 'object') { + for (var key in data) { + data[key] = _reconstructPacket(data[key], buffers); } - return data; } - packet.data = _reconstructPacket(packet.data); - packet.attachments = undefined; // no longer useful - return packet; -}; + return data; +} /** * Asynchronously removes Blobs or Files from data via @@ -124,7 +122,7 @@ exports.removeBlobs = function(data, callback) { for (var i = 0; i < obj.length; i++) { _removeBlobs(obj[i], i, obj); } - } else if (obj && 'object' === typeof obj && !isBuf(obj)) { // and object + } else if (typeof obj === 'object' && !isBuf(obj)) { // and object for (var key in obj) { _removeBlobs(obj[key], key, obj); } diff --git a/index.js b/index.js index 81273ee..902d188 100644 --- a/index.js +++ b/index.js @@ -144,22 +144,19 @@ Encoder.prototype.encode = function(obj, callback){ */ function encodeAsString(obj) { - var str = ''; // first is type - str += obj.type; + var str = '' + obj.type; // attachments if we have them if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) { - str += obj.attachments; - str += '-'; + str += obj.attachments + '-'; } // if we have a namespace other than `/` // we append it followed by a comma `,` if (obj.nsp && '/' !== obj.nsp) { - str += obj.nsp; - str += ','; + str += obj.nsp + ','; } // immediately followed by the id @@ -265,15 +262,16 @@ Decoder.prototype.add = function(obj) { */ function decodeString(str) { - var p = {}; var i = 0; - // look up type - p.type = Number(str.charAt(0)); + var p = { + type: Number(str.charAt(0)) + }; + if (null == exports.types[p.type]) return error(); // look up attachments if type binary - if (exports.BINARY_EVENT == p.type || exports.BINARY_ACK == p.type) { + if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) { var buf = ''; while (str.charAt(++i) !== '-') { buf += str.charAt(i); @@ -390,7 +388,7 @@ BinaryReconstructor.prototype.finishedReconstruction = function() { this.buffers = []; }; -function error(data){ +function error() { return { type: exports.ERROR, data: 'parser error'