From a3889cb9fcb602f90f1df9809aa536406cc1aad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sun, 11 Feb 2018 12:04:05 -0800 Subject: [PATCH 1/8] Require Node.js 6 or newer --- .travis.yml | 1 - package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 05d5124..a170b52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: node_js node_js: - - 4 - 6 - 8 - 'stable' diff --git a/package.json b/package.json index b155b1d..4492a12 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Parse curl --trace option output to raw HTTP message", "main": "lib/parser.js", "engines": { - "node": ">= 4" + "node": ">= 6" }, "scripts": { "test": "scripts/test", From e49906a24039670d7d2f633cbad12320dfa5d978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:20:22 +0100 Subject: [PATCH 2/8] Rename src/parser.coffee -> lib/parser.js --- .gitignore | 1 - .npmignore | 2 -- src/parser.coffee => lib/parser.js | 0 3 files changed, 3 deletions(-) rename src/parser.coffee => lib/parser.js (100%) diff --git a/.gitignore b/.gitignore index 69a671c..3c3629e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ node_modules -/lib \ No newline at end of file diff --git a/.npmignore b/.npmignore index b7ccf7b..c1c9f4d 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1 @@ -src/ .git* - diff --git a/src/parser.coffee b/lib/parser.js similarity index 100% rename from src/parser.coffee rename to lib/parser.js From bb01480fac1bab2225f5a294e67574691c95a4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:20:59 +0100 Subject: [PATCH 3/8] Decaffinate lib/parser.js --- lib/parser.js | 237 ++++++++++++++++++++++++++++---------------------- 1 file changed, 132 insertions(+), 105 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index c2ba2d0..92fce26 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -1,106 +1,133 @@ -parse = (trace) -> - - dir = (ident) -> - - if ident == "=>" - return "request" - if ident == "<=" - return "response" - - # better regex, please, start here: - # http://scriptular.com/#%5E(%3F%3A%5Ba-z0-9%5D%7B4%7D%3A)%20((%3F%3A%5Ba-z0-9%5D%7B2%7D%20)%7B1%2C16%7D)%7C%7C%7C%7C%7C%7C%7C%7C%5B%2200a0%3A%2011%2022%2033%2044%2055%2066%2077%2088%2099%2010%2011%2012%2013%2014%2015%2016%2017%20%20%7B.%20%20%5C%22headers%5C%22%3A%20%7B%22%5D - - traceLines = trace.split("\n") - dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/ - dirPattern = /^(=>|<=)/ - - # find ASCI bytes in raw lines - - # will contain array of arrays with direction and data - # e.g [['<=', "47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61"]] - asciiHexSets = [] - lastDir = "" - - for line in traceLines - dirMatch = dirPattern.exec line - unless dirMatch == null - lastDir = dirMatch[0].trim() - - dataMatch = dataPattern.exec line - unless dataMatch == null - data = dataMatch[1].trim() - asciiHexSets.push [lastDir, data] - - - # split lines by spaces and make array of ASCII hex bytes - asciiHexBuffer = {request: [], response: []} - for set in asciiHexSets - data = set[1] - for byte in data.split " " - asciiHexBuffer[dir(set[0])].push byte - - #convert ASCII hex to ASCII integers codes - asciiIntBuffer = {request: [], response: []} - for dir, hexs of asciiHexBuffer - for hex in hexs - asciiIntBuffer[dir].push(parseInt('0x' + hex)) - - #convert ACII codes to charactes - stringBuffer = {request: [], response: []} - for dir, codes of asciiIntBuffer - for code in codes - stringBuffer[dir].push String.fromCharCode code - - output = {} - output['request'] = stringBuffer['request'].join "" - output['response'] = stringBuffer['response'].join "" - output - - -parseToString = (trace) -> - message = parse(trace) - output = "" - - request = [] - requestLines = message['request'].split "\r\n" - for line in requestLines - request.push "> " + line - output += request.join "\r\n" - output += "\n" - output += "\r\n" - response = [] - responseLines = message['response'].split "\r\n" - for line in responseLines - response.push "< " + line - output += response.join "\r\n" - output += "\n" - output - - - -parseBackRequestAndResponseFromString = (string) -> - output = {} - - request = [] - stringLines = string.split('\r\n') - for line in stringLines - request.push line.replace /^> /, '' if /^> /.test line - - #removing trailing LF - output['request'] = request.join('\r\n').replace /\n$/, '' - - response = [] - for line in stringLines - response.push line.replace /^< /, '' if /^< /.test line - - #removing trailing LF - output['response'] = response.join('\r\n').replace /\n$/, '' - - output - - -module.exports.parseBackRequestAndResponseFromString = parseBackRequestAndResponseFromString -module.exports.parseBack = parseBackRequestAndResponseFromString -module.exports.parseToString = parseToString -module.exports.parse = parse +/* + * decaffeinate suggestions: + * DS101: Remove unnecessary use of Array.from + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const parse = function(trace) { + let data; + let dir = function(ident) { + + if (ident === "=>") { + return "request"; + } + if (ident === "<=") { + return "response"; + } + }; + + // better regex, please, start here: + // http://scriptular.com/#%5E(%3F%3A%5Ba-z0-9%5D%7B4%7D%3A)%20((%3F%3A%5Ba-z0-9%5D%7B2%7D%20)%7B1%2C16%7D)%7C%7C%7C%7C%7C%7C%7C%7C%5B%2200a0%3A%2011%2022%2033%2044%2055%2066%2077%2088%2099%2010%2011%2012%2013%2014%2015%2016%2017%20%20%7B.%20%20%5C%22headers%5C%22%3A%20%7B%22%5D + + const traceLines = trace.split("\n"); + const dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/; + const dirPattern = /^(=>|<=)/; + + // find ASCI bytes in raw lines + + // will contain array of arrays with direction and data + // e.g [['<=', "47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61"]] + const asciiHexSets = []; + let lastDir = ""; + + for (let line of Array.from(traceLines)) { + const dirMatch = dirPattern.exec(line); + if (dirMatch !== null) { + lastDir = dirMatch[0].trim(); + } + + const dataMatch = dataPattern.exec(line); + if (dataMatch !== null) { + data = dataMatch[1].trim(); + asciiHexSets.push([lastDir, data]); + } + } + + + // split lines by spaces and make array of ASCII hex bytes + const asciiHexBuffer = {request: [], response: []}; + for (let set of Array.from(asciiHexSets)) { + data = set[1]; + for (let byte of Array.from(data.split(" "))) { + asciiHexBuffer[dir(set[0])].push(byte); + } + } + + //convert ASCII hex to ASCII integers codes + const asciiIntBuffer = {request: [], response: []}; + for (dir in asciiHexBuffer) { + const hexs = asciiHexBuffer[dir]; + for (let hex of Array.from(hexs)) { + asciiIntBuffer[dir].push(parseInt(`0x${hex}`)); + } + } + + //convert ACII codes to charactes + const stringBuffer = {request: [], response: []}; + for (dir in asciiIntBuffer) { + const codes = asciiIntBuffer[dir]; + for (let code of Array.from(codes)) { + stringBuffer[dir].push(String.fromCharCode(code)); + } + } + + const output = {}; + output['request'] = stringBuffer['request'].join(""); + output['response'] = stringBuffer['response'].join(""); + return output; +}; + + +const parseToString = function(trace) { + const message = parse(trace); + let output = ""; + + const request = []; + const requestLines = message['request'].split("\r\n"); + for (var line of Array.from(requestLines)) { + request.push(`> ${line}`); + } + output += request.join("\r\n"); + output += "\n"; + output += "\r\n"; + const response = []; + const responseLines = message['response'].split("\r\n"); + for (line of Array.from(responseLines)) { + response.push(`< ${line}`); + } + output += response.join("\r\n"); + output += "\n"; + return output; +}; + + + +const parseBackRequestAndResponseFromString = function(string) { + const output = {}; + + const request = []; + const stringLines = string.split('\r\n'); + for (var line of Array.from(stringLines)) { + if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } + } + + //removing trailing LF + output['request'] = request.join('\r\n').replace(/\n$/, ''); + + const response = []; + for (line of Array.from(stringLines)) { + if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } + } + + //removing trailing LF + output['response'] = response.join('\r\n').replace(/\n$/, ''); + + return output; +}; + + +module.exports.parseBackRequestAndResponseFromString = parseBackRequestAndResponseFromString; +module.exports.parseBack = parseBackRequestAndResponseFromString; +module.exports.parseToString = parseToString; +module.exports.parse = parse; From ba9dfd6ce867794ed2652803be7c829c8f0e04ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:21:36 +0100 Subject: [PATCH 4/8] eslint autofixes for parser.js --- lib/parser.js | 77 +++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 92fce26..a4bed16 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -4,23 +4,21 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const parse = function(trace) { - +const parse = function (trace) { let data; - let dir = function(ident) { - - if (ident === "=>") { - return "request"; - } - if (ident === "<=") { - return "response"; - } - }; + let dir = function (ident) { + if (ident === '=>') { + return 'request'; + } + if (ident === '<=') { + return 'response'; + } + }; // better regex, please, start here: // http://scriptular.com/#%5E(%3F%3A%5Ba-z0-9%5D%7B4%7D%3A)%20((%3F%3A%5Ba-z0-9%5D%7B2%7D%20)%7B1%2C16%7D)%7C%7C%7C%7C%7C%7C%7C%7C%5B%2200a0%3A%2011%2022%2033%2044%2055%2066%2077%2088%2099%2010%2011%2012%2013%2014%2015%2016%2017%20%20%7B.%20%20%5C%22headers%5C%22%3A%20%7B%22%5D - const traceLines = trace.split("\n"); + const traceLines = trace.split('\n'); const dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/; const dirPattern = /^(=>|<=)/; @@ -29,9 +27,9 @@ const parse = function(trace) { // will contain array of arrays with direction and data // e.g [['<=', "47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61"]] const asciiHexSets = []; - let lastDir = ""; + let lastDir = ''; - for (let line of Array.from(traceLines)) { + for (const line of Array.from(traceLines)) { const dirMatch = dirPattern.exec(line); if (dirMatch !== null) { lastDir = dirMatch[0].trim(); @@ -46,64 +44,63 @@ const parse = function(trace) { // split lines by spaces and make array of ASCII hex bytes - const asciiHexBuffer = {request: [], response: []}; - for (let set of Array.from(asciiHexSets)) { + const asciiHexBuffer = { request: [], response: [] }; + for (const set of Array.from(asciiHexSets)) { data = set[1]; - for (let byte of Array.from(data.split(" "))) { + for (const byte of Array.from(data.split(' '))) { asciiHexBuffer[dir(set[0])].push(byte); } } - //convert ASCII hex to ASCII integers codes - const asciiIntBuffer = {request: [], response: []}; + // convert ASCII hex to ASCII integers codes + const asciiIntBuffer = { request: [], response: [] }; for (dir in asciiHexBuffer) { const hexs = asciiHexBuffer[dir]; - for (let hex of Array.from(hexs)) { + for (const hex of Array.from(hexs)) { asciiIntBuffer[dir].push(parseInt(`0x${hex}`)); } } - //convert ACII codes to charactes - const stringBuffer = {request: [], response: []}; + // convert ACII codes to charactes + const stringBuffer = { request: [], response: [] }; for (dir in asciiIntBuffer) { const codes = asciiIntBuffer[dir]; - for (let code of Array.from(codes)) { + for (const code of Array.from(codes)) { stringBuffer[dir].push(String.fromCharCode(code)); } } const output = {}; - output['request'] = stringBuffer['request'].join(""); - output['response'] = stringBuffer['response'].join(""); + output.request = stringBuffer.request.join(''); + output.response = stringBuffer.response.join(''); return output; }; -const parseToString = function(trace) { +const parseToString = function (trace) { const message = parse(trace); - let output = ""; + let output = ''; const request = []; - const requestLines = message['request'].split("\r\n"); + const requestLines = message.request.split('\r\n'); for (var line of Array.from(requestLines)) { request.push(`> ${line}`); } - output += request.join("\r\n"); - output += "\n"; - output += "\r\n"; + output += request.join('\r\n'); + output += '\n'; + output += '\r\n'; const response = []; - const responseLines = message['response'].split("\r\n"); + const responseLines = message.response.split('\r\n'); for (line of Array.from(responseLines)) { response.push(`< ${line}`); } - output += response.join("\r\n"); - output += "\n"; + output += response.join('\r\n'); + output += '\n'; return output; }; - -const parseBackRequestAndResponseFromString = function(string) { +const parseBackRequestAndResponseFromString = function (string) { const output = {}; const request = []; @@ -112,16 +109,16 @@ const parseBackRequestAndResponseFromString = function(string) { if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } } - //removing trailing LF - output['request'] = request.join('\r\n').replace(/\n$/, ''); + // removing trailing LF + output.request = request.join('\r\n').replace(/\n$/, ''); const response = []; for (line of Array.from(stringLines)) { if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } } - //removing trailing LF - output['response'] = response.join('\r\n').replace(/\n$/, ''); + // removing trailing LF + output.response = response.join('\r\n').replace(/\n$/, ''); return output; }; From bb3fa44b6d3ea0f3a56840dba61a24b8b851db76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:24:27 +0100 Subject: [PATCH 5/8] Adjust tests and build process for decaffinated code. --- scripts/build | 9 --------- scripts/prepublish | 3 +-- scripts/test | 1 - test/integration/cli-test.coffee | 8 -------- test/integration/js-api-test.coffee | 2 +- test/unit/parser-test.coffee | 2 +- 6 files changed, 3 insertions(+), 22 deletions(-) delete mode 100755 scripts/build diff --git a/scripts/build b/scripts/build deleted file mode 100755 index 8bcd475..0000000 --- a/scripts/build +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -if [ -d "src/" ]; then - rm -fr lib/ - node_modules/.bin/coffee -b -c -o lib/ src/ - #mkdir lib - #cp -a -R src/* lib/ -fi - - diff --git a/scripts/prepublish b/scripts/prepublish index 2fcc6bf..a5344cf 100755 --- a/scripts/prepublish +++ b/scripts/prepublish @@ -1,3 +1,2 @@ #!/bin/sh -./scripts/test && -./scripts/build \ No newline at end of file +./scripts/test diff --git a/scripts/test b/scripts/test index abfee6d..72ca538 100755 --- a/scripts/test +++ b/scripts/test @@ -1,3 +1,2 @@ #!/bin/sh -./scripts/build ./node_modules/mocha/bin/mocha --reporter spec --compilers=coffee:coffeescript/register ./test/**/*-test.coffee diff --git a/test/integration/cli-test.coffee b/test/integration/cli-test.coffee index f2f4397..0d954d7 100644 --- a/test/integration/cli-test.coffee +++ b/test/integration/cli-test.coffee @@ -5,14 +5,6 @@ fs = require('fs') cmdPrefix = '' describe "Command line", () -> - before (done) -> - #CLI is linked with native JS in /lib so re-compile Coffee /src to /lib - cmd = './scripts/build' - cli = exec cmdPrefix + cmd, (error, out, err) -> - if error - done error - done() - describe "parsing from standard input with --raw", () -> stdout = "" stderr = "" diff --git a/test/integration/js-api-test.coffee b/test/integration/js-api-test.coffee index dc2ed2a..013890e 100644 --- a/test/integration/js-api-test.coffee +++ b/test/integration/js-api-test.coffee @@ -2,7 +2,7 @@ fs = require 'fs' {assert} = require('chai') {exec} = require('child_process') -parser = require('../../src/parser') +parser = require('../../lib/parser') describe "Javascript API", () -> describe "parsing from file", () -> diff --git a/test/unit/parser-test.coffee b/test/unit/parser-test.coffee index ee0119c..c06fab8 100644 --- a/test/unit/parser-test.coffee +++ b/test/unit/parser-test.coffee @@ -1,6 +1,6 @@ fs = require 'fs' assert = require('chai').assert -parser = require '../../src/parser' +parser = require '../../lib/parser' describe 'parser module', () -> output = "" From 0e709b6d0a4ca47d5f83715daeef5fe6d54739c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:31:22 +0100 Subject: [PATCH 6/8] Handle all decaffeinate suggestions --- lib/parser.js | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index a4bed16..769e4bd 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -1,9 +1,3 @@ -/* - * decaffeinate suggestions: - * DS101: Remove unnecessary use of Array.from - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ const parse = function (trace) { let data; let dir = function (ident) { @@ -29,7 +23,7 @@ const parse = function (trace) { const asciiHexSets = []; let lastDir = ''; - for (const line of Array.from(traceLines)) { + for (const line of traceLines) { const dirMatch = dirPattern.exec(line); if (dirMatch !== null) { lastDir = dirMatch[0].trim(); @@ -45,9 +39,9 @@ const parse = function (trace) { // split lines by spaces and make array of ASCII hex bytes const asciiHexBuffer = { request: [], response: [] }; - for (const set of Array.from(asciiHexSets)) { + for (const set of asciiHexSets) { data = set[1]; - for (const byte of Array.from(data.split(' '))) { + for (const byte of data.split(' ')) { asciiHexBuffer[dir(set[0])].push(byte); } } @@ -56,7 +50,7 @@ const parse = function (trace) { const asciiIntBuffer = { request: [], response: [] }; for (dir in asciiHexBuffer) { const hexs = asciiHexBuffer[dir]; - for (const hex of Array.from(hexs)) { + for (const hex of hexs) { asciiIntBuffer[dir].push(parseInt(`0x${hex}`)); } } @@ -65,7 +59,7 @@ const parse = function (trace) { const stringBuffer = { request: [], response: [] }; for (dir in asciiIntBuffer) { const codes = asciiIntBuffer[dir]; - for (const code of Array.from(codes)) { + for (const code of codes) { stringBuffer[dir].push(String.fromCharCode(code)); } } @@ -83,7 +77,7 @@ const parseToString = function (trace) { const request = []; const requestLines = message.request.split('\r\n'); - for (var line of Array.from(requestLines)) { + for (var line of requestLines) { request.push(`> ${line}`); } output += request.join('\r\n'); @@ -91,7 +85,7 @@ const parseToString = function (trace) { output += '\r\n'; const response = []; const responseLines = message.response.split('\r\n'); - for (line of Array.from(responseLines)) { + for (line of responseLines) { response.push(`< ${line}`); } output += response.join('\r\n'); @@ -105,7 +99,7 @@ const parseBackRequestAndResponseFromString = function (string) { const request = []; const stringLines = string.split('\r\n'); - for (var line of Array.from(stringLines)) { + for (var line of stringLines) { if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } } @@ -113,7 +107,7 @@ const parseBackRequestAndResponseFromString = function (string) { output.request = request.join('\r\n').replace(/\n$/, ''); const response = []; - for (line of Array.from(stringLines)) { + for (line of stringLines) { if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } } From ccf27cfb579a0640704557e0e07b468b7c4a2209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 10:52:14 +0100 Subject: [PATCH 7/8] Fix lint errors found by eslint --- lib/parser.js | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 769e4bd..524c02d 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -1,6 +1,5 @@ const parse = function (trace) { - let data; - let dir = function (ident) { + const dir = function (ident) { if (ident === '=>') { return 'request'; } @@ -31,7 +30,7 @@ const parse = function (trace) { const dataMatch = dataPattern.exec(line); if (dataMatch !== null) { - data = dataMatch[1].trim(); + const data = dataMatch[1].trim(); asciiHexSets.push([lastDir, data]); } } @@ -39,28 +38,27 @@ const parse = function (trace) { // split lines by spaces and make array of ASCII hex bytes const asciiHexBuffer = { request: [], response: [] }; - for (const set of asciiHexSets) { - data = set[1]; + for (const [direction, data] of asciiHexSets) { for (const byte of data.split(' ')) { - asciiHexBuffer[dir(set[0])].push(byte); + asciiHexBuffer[dir(direction)].push(byte); } } // convert ASCII hex to ASCII integers codes const asciiIntBuffer = { request: [], response: [] }; - for (dir in asciiHexBuffer) { - const hexs = asciiHexBuffer[dir]; + for (const key of Object.keys(asciiHexBuffer)) { + const hexs = asciiHexBuffer[key]; for (const hex of hexs) { - asciiIntBuffer[dir].push(parseInt(`0x${hex}`)); + asciiIntBuffer[key].push(parseInt(hex, 16)); } } // convert ACII codes to charactes const stringBuffer = { request: [], response: [] }; - for (dir in asciiIntBuffer) { - const codes = asciiIntBuffer[dir]; + for (const key of Object.keys(asciiIntBuffer)) { + const codes = asciiIntBuffer[key]; for (const code of codes) { - stringBuffer[dir].push(String.fromCharCode(code)); + stringBuffer[key].push(String.fromCharCode(code)); } } @@ -77,7 +75,7 @@ const parseToString = function (trace) { const request = []; const requestLines = message.request.split('\r\n'); - for (var line of requestLines) { + for (const line of requestLines) { request.push(`> ${line}`); } output += request.join('\r\n'); @@ -85,7 +83,7 @@ const parseToString = function (trace) { output += '\r\n'; const response = []; const responseLines = message.response.split('\r\n'); - for (line of responseLines) { + for (const line of responseLines) { response.push(`< ${line}`); } output += response.join('\r\n'); @@ -99,7 +97,7 @@ const parseBackRequestAndResponseFromString = function (string) { const request = []; const stringLines = string.split('\r\n'); - for (var line of stringLines) { + for (const line of stringLines) { if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } } @@ -107,7 +105,7 @@ const parseBackRequestAndResponseFromString = function (string) { output.request = request.join('\r\n').replace(/\n$/, ''); const response = []; - for (line of stringLines) { + for (const line of stringLines) { if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } } From add54e474aa14962a9b266c05d21b10092f3b8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 17 Mar 2018 11:03:01 +0100 Subject: [PATCH 8/8] Restructuring the code to be more readable --- lib/parser.js | 61 ++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 524c02d..aaa8559 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -1,16 +1,15 @@ -const parse = function (trace) { - const dir = function (ident) { - if (ident === '=>') { - return 'request'; - } - if (ident === '<=') { - return 'response'; - } - }; +function dir(ident) { + if (ident === '=>') { + return 'request'; + } + if (ident === '<=') { + return 'response'; + } +} +function parse(trace) { // better regex, please, start here: // http://scriptular.com/#%5E(%3F%3A%5Ba-z0-9%5D%7B4%7D%3A)%20((%3F%3A%5Ba-z0-9%5D%7B2%7D%20)%7B1%2C16%7D)%7C%7C%7C%7C%7C%7C%7C%7C%5B%2200a0%3A%2011%2022%2033%2044%2055%2066%2077%2088%2099%2010%2011%2012%2013%2014%2015%2016%2017%20%20%7B.%20%20%5C%22headers%5C%22%3A%20%7B%22%5D - const traceLines = trace.split('\n'); const dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/; const dirPattern = /^(=>|<=)/; @@ -35,7 +34,6 @@ const parse = function (trace) { } } - // split lines by spaces and make array of ASCII hex bytes const asciiHexBuffer = { request: [], response: [] }; for (const [direction, data] of asciiHexSets) { @@ -62,14 +60,13 @@ const parse = function (trace) { } } - const output = {}; - output.request = stringBuffer.request.join(''); - output.response = stringBuffer.response.join(''); - return output; -}; - + return { + request: stringBuffer.request.join(''), + response: stringBuffer.response.join('') + }; +} -const parseToString = function (trace) { +function parseToString(trace) { const message = parse(trace); let output = ''; @@ -89,16 +86,17 @@ const parseToString = function (trace) { output += response.join('\r\n'); output += '\n'; return output; -}; +} - -const parseBackRequestAndResponseFromString = function (string) { - const output = {}; +function parseBackRequestAndResponseFromString(string) { + const output = {request: '', response: ''}; const request = []; const stringLines = string.split('\r\n'); for (const line of stringLines) { - if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } + if (line.startsWith('> ')) { + request.push(line.replace(/^> /, '')); + } } // removing trailing LF @@ -106,17 +104,20 @@ const parseBackRequestAndResponseFromString = function (string) { const response = []; for (const line of stringLines) { - if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } + if (line.startsWith('< ')) { + response.push(line.replace(/^< /, '')); + } } // removing trailing LF output.response = response.join('\r\n').replace(/\n$/, ''); return output; -}; +} - -module.exports.parseBackRequestAndResponseFromString = parseBackRequestAndResponseFromString; -module.exports.parseBack = parseBackRequestAndResponseFromString; -module.exports.parseToString = parseToString; -module.exports.parse = parse; +module.exports = { + parseBackRequestAndResponseFromString, + parseBack: parseBackRequestAndResponseFromString, + parseToString, + parse +};