summaryrefslogtreecommitdiff
path: root/share/server/util.js
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2010-01-26 00:11:59 +0000
committerJohn Christopher Anderson <jchris@apache.org>2010-01-26 00:11:59 +0000
commit8d3b7ab31c1289e1425d1f4f348b7ca0021ab7fe (patch)
tree5e77f5c042ad40bf02eb5536fa70fb4e54b662c7 /share/server/util.js
parent5a87b852a72cc36d4d7b64271ed542ce2a1befe0 (diff)
Replace the old JavaScript query server JSON library with json2.js
This change makes us interoperate better with other JSON implementations. It also means we can use the native JSON handlers in JavaScript runtimes that support them. Should be faster right away on new Spidermonkeys. There are some potential breaking changes for apps that depend on Couch blowing up on 'undefined'. json2.js serialized undefined as 'null' instead of crashing. This change will also affect people using E4X, as you can't just return an XML object and have it serialized to a string for you. Calling .toXMLString() on these is all you need to do. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@903023 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'share/server/util.js')
-rw-r--r--share/server/util.js64
1 files changed, 3 insertions, 61 deletions
diff --git a/share/server/util.js b/share/server/util.js
index bd4abc1d..c2e6600f 100644
--- a/share/server/util.js
+++ b/share/server/util.js
@@ -13,14 +13,7 @@
var Couch = {
// moving this away from global so we can move to json2.js later
toJSON : function (val) {
- if (typeof(val) == "undefined") {
- throw "Cannot encode 'undefined' value as JSON";
- }
- if (typeof(val) == "xml") { // E4X support
- val = val.toXMLString();
- }
- if (val === null) { return "null"; }
- return (Couch.toJSON.dispatcher[val.constructor.name])(val);
+ return JSON.stringify(val);
},
compileFunction : function(source) {
if (!source) throw(["error","not_found","missing function"]);
@@ -47,55 +40,6 @@ var Couch = {
}
}
-Couch.toJSON.subs = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f',
- '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
-Couch.toJSON.dispatcher = {
- "Array": function(v) {
- var buf = [];
- for (var i = 0; i < v.length; i++) {
- buf.push(Couch.toJSON(v[i]));
- }
- return "[" + buf.join(",") + "]";
- },
- "Boolean": function(v) {
- return v.toString();
- },
- "Date": function(v) {
- var f = function(n) { return n < 10 ? '0' + n : n };
- return '"' + v.getUTCFullYear() + '-' +
- f(v.getUTCMonth() + 1) + '-' +
- f(v.getUTCDate()) + 'T' +
- f(v.getUTCHours()) + ':' +
- f(v.getUTCMinutes()) + ':' +
- f(v.getUTCSeconds()) + 'Z"';
- },
- "Number": function(v) {
- return isFinite(v) ? v.toString() : "null";
- },
- "Object": function(v) {
- //if (v === null) return "null";
- var buf = [];
- for (var k in v) {
- if (!v.hasOwnProperty(k) || typeof(k) !== "string" || v[k] === undefined) {
- continue;
- }
- buf.push(Couch.toJSON(k) + ": " + Couch.toJSON(v[k]));
- }
- return "{" + buf.join(",") + "}";
- },
- "String": function(v) {
- if (/["\\\x00-\x1f]/.test(v)) {
- v = v.replace(/([\x00-\x1f\\"])/g, function(a, b) {
- var c = Couch.toJSON.subs[b];
- if (c) return c;
- c = b.charCodeAt();
- return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
- });
- }
- return '"' + v + '"';
- }
-};
-
// prints the object as JSON, and rescues and logs any toJSON() related errors
function respond(obj) {
try {
@@ -107,10 +51,8 @@ function respond(obj) {
};
function log(message) {
- // return; // idea: query_server_config option for log level
- if (typeof message == "undefined") {
- message = "Error: attempting to log message of 'undefined'.";
- } else if (typeof message != "string") {
+ // idea: query_server_config option for log level
+ if (typeof message != "string") {
message = Couch.toJSON(message);
}
respond(["log", message]);