summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/vendor/jsol.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/vendor/jsol.js')
-rwxr-xr-xdevtools/client/shared/vendor/jsol.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/devtools/client/shared/vendor/jsol.js b/devtools/client/shared/vendor/jsol.js
new file mode 100755
index 000000000..a87948c43
--- /dev/null
+++ b/devtools/client/shared/vendor/jsol.js
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+(function () {
+ /**
+ JSOL stands for JavaScript Object Literal which is a string representing
+ an object in JavaScript syntax.
+
+ For example:
+
+ {foo:"bar"} is equivalent to {"foo":"bar"} in JavaScript. Both are valid JSOL.
+
+ Note that {"foo":"bar"} is proper JSON[1] therefore you can use one of the many
+ JSON parsers out there like json2.js[2] or even the native browser's JSON parser,
+ if available.
+
+ However, {foo:"bar"} is NOT proper JSON but valid Javascript syntax for
+ representing an object with one key, "foo" and its value, "bar".
+ Using a JSON parser is not an option since this is NOT proper JSON.
+
+ You can use JSOL.parse to safely parse any string that reprsents a JavaScript Object Literal.
+ JSOL.parse will throw an Invalid JSOL exception on function calls, function declarations and variable references.
+
+ Examples:
+
+ JSOL.parse('{foo:"bar"}'); // valid
+
+ JSOL.parse('{evil:(function(){alert("I\'m evil");})()}'); // invalid function calls
+
+ JSOL.parse('{fn:function() { }}'); // invalid function declarations
+
+ var bar = "bar";
+ JSOL.parse('{foo:bar}'); // invalid variable references
+
+ [1] http://www.json.org
+ [2] http://www.json.org/json2.js
+ */
+ var trim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g; // Used for trimming whitespace
+ var JSOL = {
+ parse: function(text) {
+ // make sure text is a "string"
+ if (typeof text !== "string" || !text) {
+ return null;
+ }
+ // Make sure leading/trailing whitespace is removed
+ text = text.replace(trim, "");
+ // Make sure the incoming text is actual JSOL (or Javascript Object Literal)
+ // Logic borrowed from http://json.org/json2.js
+ if ( /^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, ":")
+ /** everything up to this point is json2.js **/
+ /** this is the 5th stage where it accepts unquoted keys **/
+ .replace(/\w*\s*\:/g, ":")) ) {
+ return (new Function("return " + text))();
+ }
+ else {
+ throw("Invalid JSOL: " + text);
+ }
+ }
+ };
+
+ if (typeof define === "function" && define.amd) {
+ define(JSOL);
+ } else if (typeof module === "object" && module.exports) {
+ module.exports = JSOL;
+ } else {
+ this.JSOL = JSOL;
+ }
+})();