diff --git a/lib/modem.js b/lib/modem.js index 6e60587..d4a5cc2 100644 --- a/lib/modem.js +++ b/lib/modem.js @@ -11,7 +11,9 @@ var querystring = require('querystring'), splitca = require('split-ca'), os = require('os'), isWin = os.type() === 'Windows_NT', - stream = require('stream'); + stream = require('stream'), + streamJson = require('stream-json'), + Asm = require('stream-json/Assembler'); var defaultOpts = function () { var host; @@ -336,15 +338,15 @@ Modem.prototype.buildRequest = function (options, context, data, callback) { res.on('end', function () { var buffer = Buffer.concat(chunks); - var result = buffer.toString(); - - debug('Received: %s', result); - - var json = utils.parseJSON(result) || buffer; - if (finished === false) { - finished = true; - self.buildPayload(null, context.isStream, context.statusCodes, false, req, res, json, callback); - } + var parser = stream.Readable.from(buffer).pipe(streamJson.parser()); + var asm = Asm.connectTo(parser); + asm.on('done', asm => { + var json = asm.current || buffer; + if (finished === false) { + finished = true; + self.buildPayload(null, context.isStream, context.statusCodes, false, req, res, json, callback); + } + }); }); } }); diff --git a/package-lock.json b/package-lock.json index 18b49d2..3b1a08d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "docker-modem", - "version": "5.0.2", + "version": "5.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "docker-modem", - "version": "5.0.2", + "version": "5.0.3", "license": "Apache-2.0", "dependencies": { "debug": "^4.1.1", "readable-stream": "^3.5.0", "split-ca": "^1.0.1", - "ssh2": "^1.15.0" + "ssh2": "^1.15.0", + "stream-json": "^1.8.0" }, "devDependencies": { "chai": "~4.2.0", @@ -911,6 +912,19 @@ "nan": "^2.18.0" } }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + }, + "node_modules/stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", diff --git a/package.json b/package.json index 31f5540..e0bc275 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "debug": "^4.1.1", "readable-stream": "^3.5.0", "split-ca": "^1.0.1", - "ssh2": "^1.15.0" + "ssh2": "^1.15.0", + "stream-json": "^1.8.0" }, "devDependencies": { "chai": "~4.2.0",