UNPKG

rocket.chat.mqtt

Version:

It's a MQTT Server, using redis to scale horizontally.

119 lines (100 loc) 3.35 kB
// Based on json2.js from https://github.com/douglascrockford/JSON-js // // json2.js // 2012-10-08 // // Public Domain. // // NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. function quote(string) { return JSON.stringify(string); } var str = function (key, holder, singleIndent, outerIndent, canonical) { // Produce a string from holder[key]. var i; // The loop counter. var k; // The member key. var v; // The member value. var length; var innerIndent = outerIndent; var partial; var value = holder[key]; // What happens next depends on the value's type. switch (typeof value) { case 'string': return quote(value); case 'number': // JSON numbers must be finite. Encode non-finite numbers as null. return isFinite(value) ? String(value) : 'null'; case 'boolean': return String(value); // If the type is 'object', we might be dealing with an object or an array or // null. case 'object': // Due to a specification blunder in ECMAScript, typeof null is 'object', // so watch out for that case. if (!value) { return 'null'; } // Make an array to hold the partial results of stringifying this object value. innerIndent = outerIndent + singleIndent; partial = []; // Is the value an array? if (_.isArray(value) || _.isArguments(value)) { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value, singleIndent, innerIndent, canonical) || 'null'; } // Join all of the elements together, separated with commas, and wrap them in // brackets. if (partial.length === 0) { v = '[]'; } else if (innerIndent) { v = '[\n' + innerIndent + partial.join(',\n' + innerIndent) + '\n' + outerIndent + ']'; } else { v = '[' + partial.join(',') + ']'; } return v; } // Iterate through all of the keys in the object. var keys = _.keys(value); if (canonical) keys = keys.sort(); _.each(keys, function (k) { v = str(k, value, singleIndent, innerIndent, canonical); if (v) { partial.push(quote(k) + (innerIndent ? ': ' : ':') + v); } }); // Join all of the member texts together, separated with commas, // and wrap them in braces. if (partial.length === 0) { v = '{}'; } else if (innerIndent) { v = '{\n' + innerIndent + partial.join(',\n' + innerIndent) + '\n' + outerIndent + '}'; } else { v = '{' + partial.join(',') + '}'; } return v; } } // If the JSON object does not yet have a stringify method, give it one. EJSON._canonicalStringify = function (value, options) { // Make a fake root object containing our value under the key of ''. // Return the result of stringifying the value. options = _.extend({ indent: "", canonical: false }, options); if (options.indent === true) { options.indent = " "; } else if (typeof options.indent === 'number') { var newIndent = ""; for (var i = 0; i < options.indent; i++) { newIndent += ' '; } options.indent = newIndent; } return str('', {'': value}, options.indent, "", options.canonical); };