-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathharParser.js
92 lines (72 loc) · 2.27 KB
/
harParser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const fs = require('fs');
var ignoredHeader = [
"Date","X-Powered-By","Content-Length","Connection","Expires"
];
function parse(filePath, options){
options = options || {};
var har = requireJSON(filePath);
var mocks = [];
for( var i=har.log.entries.length-1 ; i>= 0 ; i-- ){
var entry = har.log.entries[i];
var mock = {
response : {
headers : {}
},
queryParams : {}
};
if( !inFilter(entry.request.url, options.filter) ){
continue;
}
mock.method = entry.request.method;
var urlParts = entry.request.url.replace(/https?:\/\/.+?\//g,"").split("?");
mock.url = urlParts[0];
if( urlParts[1] ){
var queryParams = urlParts[1].split("&");
for( var j in queryParams ){
var queryParam = queryParams[j].split("=");
var key = queryParam[0];
var value = queryParam[1];
if( options.queryParams && options.queryParams.ignore && !!~options.queryParams.ignore.indexOf(key) ){
continue;
}
mock.queryParams[key] = value;
}
}
mock.response.code = entry.response.status;
for( var j in entry.response.headers ){
var header = entry.response.headers[j];
if( ~ignoredHeader.indexOf(header.name) ){
continue;
}
mock.response.headers[header.name] = header.value;
}
mock.response.body = entry.response.content.text;
mocks.push(mock);
}
return mocks;
}
function inFilter(value, filter){
if( filter ){
if( Array.isArray(filter) ){
for( var i in filter ){
var filterValue = filter[i];
var reg = new RegExp(filterValue);
if( reg.test(value)){
return true;
}
}
}
else{
var reg = new RegExp(filter);
if(reg.test(value)){
return true;
}
}
return false;
}
return true;
}
function requireJSON(filePath) {
return JSON.parse(fs.readFileSync(filePath, "utf8"));
}
module.exports = { parse : parse };