curl-trace-parser
Version:
Parse curl --trace option output to raw HTTP message
126 lines (118 loc) • 3.65 kB
JavaScript
// 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;