UNPKG

curl-trace-parser

Version:

Parse curl --trace option output to raw HTTP message

126 lines (118 loc) 3.65 kB
// Generated by CoffeeScript 1.12.7 var parse, parseBackRequestAndResponseFromString, parseToString; parse = function(trace) { var asciiHexBuffer, asciiHexSets, asciiIntBuffer, byte, code, codes, data, dataMatch, dataPattern, dir, dirMatch, dirPattern, hex, hexs, i, j, k, l, lastDir, len, len1, len2, len3, len4, line, m, output, ref, set, stringBuffer, traceLines; dir = function(ident) { if (ident === "=>") { return "request"; } if (ident === "<=") { return "response"; } }; traceLines = trace.split("\n"); dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/; dirPattern = /^(=>|<=)/; asciiHexSets = []; lastDir = ""; for (i = 0, len = traceLines.length; i < len; i++) { line = traceLines[i]; dirMatch = dirPattern.exec(line); if (dirMatch !== null) { lastDir = dirMatch[0].trim(); } dataMatch = dataPattern.exec(line); if (dataMatch !== null) { data = dataMatch[1].trim(); asciiHexSets.push([lastDir, data]); } } asciiHexBuffer = { request: [], response: [] }; for (j = 0, len1 = asciiHexSets.length; j < len1; j++) { set = asciiHexSets[j]; data = set[1]; ref = data.split(" "); for (k = 0, len2 = ref.length; k < len2; k++) { byte = ref[k]; asciiHexBuffer[dir(set[0])].push(byte); } } asciiIntBuffer = { request: [], response: [] }; for (dir in asciiHexBuffer) { hexs = asciiHexBuffer[dir]; for (l = 0, len3 = hexs.length; l < len3; l++) { hex = hexs[l]; asciiIntBuffer[dir].push(parseInt('0x' + hex)); } } stringBuffer = { request: [], response: [] }; for (dir in asciiIntBuffer) { codes = asciiIntBuffer[dir]; for (m = 0, len4 = codes.length; m < len4; m++) { code = codes[m]; stringBuffer[dir].push(String.fromCharCode(code)); } } output = {}; output['request'] = stringBuffer['request'].join(""); output['response'] = stringBuffer['response'].join(""); return output; }; parseToString = function(trace) { var i, j, len, len1, line, message, output, request, requestLines, response, responseLines; message = parse(trace); output = ""; request = []; requestLines = message['request'].split("\r\n"); for (i = 0, len = requestLines.length; i < len; i++) { line = requestLines[i]; request.push("> " + line); } output += request.join("\r\n"); output += "\n"; output += "\r\n"; response = []; responseLines = message['response'].split("\r\n"); for (j = 0, len1 = responseLines.length; j < len1; j++) { line = responseLines[j]; response.push("< " + line); } output += response.join("\r\n"); output += "\n"; return output; }; parseBackRequestAndResponseFromString = function(string) { var i, j, len, len1, line, output, request, response, stringLines; output = {}; request = []; stringLines = string.split('\r\n'); for (i = 0, len = stringLines.length; i < len; i++) { line = stringLines[i]; if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); } } output['request'] = request.join('\r\n').replace(/\n$/, ''); response = []; for (j = 0, len1 = stringLines.length; j < len1; j++) { line = stringLines[j]; if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); } } 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;