Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit bb01480

Browse files
committed
Decaffinate lib/parser.js
1 parent e49906a commit bb01480

File tree

1 file changed

+132
-105
lines changed

1 file changed

+132
-105
lines changed

lib/parser.js

Lines changed: 132 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,133 @@
1-
parse = (trace) ->
2-
3-
dir = (ident) ->
4-
5-
if ident == "=>"
6-
return "request"
7-
if ident == "<="
8-
return "response"
9-
10-
# better regex, please, start here:
11-
# 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
12-
13-
traceLines = trace.split("\n")
14-
dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/
15-
dirPattern = /^(=>|<=)/
16-
17-
# find ASCI bytes in raw lines
18-
19-
# will contain array of arrays with direction and data
20-
# e.g [['<=', "47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61"]]
21-
asciiHexSets = []
22-
lastDir = ""
23-
24-
for line in traceLines
25-
dirMatch = dirPattern.exec line
26-
unless dirMatch == null
27-
lastDir = dirMatch[0].trim()
28-
29-
dataMatch = dataPattern.exec line
30-
unless dataMatch == null
31-
data = dataMatch[1].trim()
32-
asciiHexSets.push [lastDir, data]
33-
34-
35-
# split lines by spaces and make array of ASCII hex bytes
36-
asciiHexBuffer = {request: [], response: []}
37-
for set in asciiHexSets
38-
data = set[1]
39-
for byte in data.split " "
40-
asciiHexBuffer[dir(set[0])].push byte
41-
42-
#convert ASCII hex to ASCII integers codes
43-
asciiIntBuffer = {request: [], response: []}
44-
for dir, hexs of asciiHexBuffer
45-
for hex in hexs
46-
asciiIntBuffer[dir].push(parseInt('0x' + hex))
47-
48-
#convert ACII codes to charactes
49-
stringBuffer = {request: [], response: []}
50-
for dir, codes of asciiIntBuffer
51-
for code in codes
52-
stringBuffer[dir].push String.fromCharCode code
53-
54-
output = {}
55-
output['request'] = stringBuffer['request'].join ""
56-
output['response'] = stringBuffer['response'].join ""
57-
output
58-
59-
60-
parseToString = (trace) ->
61-
message = parse(trace)
62-
output = ""
63-
64-
request = []
65-
requestLines = message['request'].split "\r\n"
66-
for line in requestLines
67-
request.push "> " + line
68-
output += request.join "\r\n"
69-
output += "\n"
70-
output += "\r\n"
71-
response = []
72-
responseLines = message['response'].split "\r\n"
73-
for line in responseLines
74-
response.push "< " + line
75-
output += response.join "\r\n"
76-
output += "\n"
77-
output
78-
79-
80-
81-
parseBackRequestAndResponseFromString = (string) ->
82-
output = {}
83-
84-
request = []
85-
stringLines = string.split('\r\n')
86-
for line in stringLines
87-
request.push line.replace /^> /, '' if /^> /.test line
88-
89-
#removing trailing LF
90-
output['request'] = request.join('\r\n').replace /\n$/, ''
91-
92-
response = []
93-
for line in stringLines
94-
response.push line.replace /^< /, '' if /^< /.test line
95-
96-
#removing trailing LF
97-
output['response'] = response.join('\r\n').replace /\n$/, ''
98-
99-
output
100-
101-
102-
module.exports.parseBackRequestAndResponseFromString = parseBackRequestAndResponseFromString
103-
module.exports.parseBack = parseBackRequestAndResponseFromString
104-
module.exports.parseToString = parseToString
105-
module.exports.parse = parse
1+
/*
2+
* decaffeinate suggestions:
3+
* DS101: Remove unnecessary use of Array.from
4+
* DS102: Remove unnecessary code created because of implicit returns
5+
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
6+
*/
7+
const parse = function(trace) {
1068

9+
let data;
10+
let dir = function(ident) {
11+
12+
if (ident === "=>") {
13+
return "request";
14+
}
15+
if (ident === "<=") {
16+
return "response";
17+
}
18+
};
19+
20+
// better regex, please, start here:
21+
// 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
22+
23+
const traceLines = trace.split("\n");
24+
const dataPattern = /^(?:[a-z0-9]{4}:) ((?:[a-z0-9]{2} ){1,16})/;
25+
const dirPattern = /^(=>|<=)/;
26+
27+
// find ASCI bytes in raw lines
28+
29+
// will contain array of arrays with direction and data
30+
// e.g [['<=', "47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61"]]
31+
const asciiHexSets = [];
32+
let lastDir = "";
33+
34+
for (let line of Array.from(traceLines)) {
35+
const dirMatch = dirPattern.exec(line);
36+
if (dirMatch !== null) {
37+
lastDir = dirMatch[0].trim();
38+
}
39+
40+
const dataMatch = dataPattern.exec(line);
41+
if (dataMatch !== null) {
42+
data = dataMatch[1].trim();
43+
asciiHexSets.push([lastDir, data]);
44+
}
45+
}
46+
47+
48+
// split lines by spaces and make array of ASCII hex bytes
49+
const asciiHexBuffer = {request: [], response: []};
50+
for (let set of Array.from(asciiHexSets)) {
51+
data = set[1];
52+
for (let byte of Array.from(data.split(" "))) {
53+
asciiHexBuffer[dir(set[0])].push(byte);
54+
}
55+
}
56+
57+
//convert ASCII hex to ASCII integers codes
58+
const asciiIntBuffer = {request: [], response: []};
59+
for (dir in asciiHexBuffer) {
60+
const hexs = asciiHexBuffer[dir];
61+
for (let hex of Array.from(hexs)) {
62+
asciiIntBuffer[dir].push(parseInt(`0x${hex}`));
63+
}
64+
}
65+
66+
//convert ACII codes to charactes
67+
const stringBuffer = {request: [], response: []};
68+
for (dir in asciiIntBuffer) {
69+
const codes = asciiIntBuffer[dir];
70+
for (let code of Array.from(codes)) {
71+
stringBuffer[dir].push(String.fromCharCode(code));
72+
}
73+
}
74+
75+
const output = {};
76+
output['request'] = stringBuffer['request'].join("");
77+
output['response'] = stringBuffer['response'].join("");
78+
return output;
79+
};
80+
81+
82+
const parseToString = function(trace) {
83+
const message = parse(trace);
84+
let output = "";
85+
86+
const request = [];
87+
const requestLines = message['request'].split("\r\n");
88+
for (var line of Array.from(requestLines)) {
89+
request.push(`> ${line}`);
90+
}
91+
output += request.join("\r\n");
92+
output += "\n";
93+
output += "\r\n";
94+
const response = [];
95+
const responseLines = message['response'].split("\r\n");
96+
for (line of Array.from(responseLines)) {
97+
response.push(`< ${line}`);
98+
}
99+
output += response.join("\r\n");
100+
output += "\n";
101+
return output;
102+
};
103+
104+
105+
106+
const parseBackRequestAndResponseFromString = function(string) {
107+
const output = {};
108+
109+
const request = [];
110+
const stringLines = string.split('\r\n');
111+
for (var line of Array.from(stringLines)) {
112+
if (/^> /.test(line)) { request.push(line.replace(/^> /, '')); }
113+
}
114+
115+
//removing trailing LF
116+
output['request'] = request.join('\r\n').replace(/\n$/, '');
117+
118+
const response = [];
119+
for (line of Array.from(stringLines)) {
120+
if (/^< /.test(line)) { response.push(line.replace(/^< /, '')); }
121+
}
122+
123+
//removing trailing LF
124+
output['response'] = response.join('\r\n').replace(/\n$/, '');
125+
126+
return output;
127+
};
128+
129+
130+
module.exports.parseBackRequestAndResponseFromString = parseBackRequestAndResponseFromString;
131+
module.exports.parseBack = parseBackRequestAndResponseFromString;
132+
module.exports.parseToString = parseToString;
133+
module.exports.parse = parse;

0 commit comments

Comments
 (0)