aboutsummaryrefslogtreecommitdiff
path: root/node_modules/formidable/lib/json_parser.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/formidable/lib/json_parser.js')
-rw-r--r--node_modules/formidable/lib/json_parser.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/node_modules/formidable/lib/json_parser.js b/node_modules/formidable/lib/json_parser.js
new file mode 100644
index 0000000..24ef63b
--- /dev/null
+++ b/node_modules/formidable/lib/json_parser.js
@@ -0,0 +1,38 @@
+if (global.GENTLY) require = GENTLY.hijack(require);
+
+var Buffer = require('buffer').Buffer;
+
+function JSONParser(parent) {
+ this.parent = parent;
+ this.data = new Buffer('');
+ this.bytesWritten = 0;
+}
+exports.JSONParser = JSONParser;
+
+JSONParser.prototype.initWithLength = function(length) {
+ this.data = new Buffer(length);
+};
+
+JSONParser.prototype.write = function(buffer) {
+ if (this.data.length >= this.bytesWritten + buffer.length) {
+ buffer.copy(this.data, this.bytesWritten);
+ } else {
+ this.data = Buffer.concat([this.data, buffer]);
+ }
+ this.bytesWritten += buffer.length;
+ return buffer.length;
+};
+
+JSONParser.prototype.end = function() {
+ try {
+ var fields = JSON.parse(this.data.toString('utf8'));
+ for (var field in fields) {
+ this.onField(field, fields[field]);
+ }
+ } catch (e) {
+ this.parent.emit('error', e);
+ }
+ this.data = null;
+
+ this.onEnd();
+};