monocart-coverage-reports 2.5.9 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +787 -778
- package/lib/cli.js +215 -215
- package/lib/converter/ast-visitor.js +675 -666
- package/lib/converter/ast.js +353 -353
- package/lib/converter/collect-source-maps.js +201 -201
- package/lib/converter/converter.js +1487 -1429
- package/lib/converter/find-original-range.js +737 -737
- package/lib/converter/ignore.js +163 -163
- package/lib/converter/info-branch.js +93 -93
- package/lib/converter/info-function.js +63 -63
- package/lib/converter/info-statement.js +43 -43
- package/lib/default/options.js +84 -84
- package/lib/default/template.html +47 -47
- package/lib/generate.js +720 -532
- package/lib/index.d.ts +360 -324
- package/lib/index.js +183 -180
- package/lib/index.mjs +5 -3
- package/lib/istanbul/istanbul-summary.js +70 -63
- package/lib/istanbul/istanbul.js +146 -146
- package/lib/packages/monocart-coverage-v8.js +1 -1
- package/lib/platform/concurrency.js +74 -74
- package/lib/platform/share.js +484 -484
- package/lib/utils/dedupe.js +118 -118
- package/lib/utils/request.js +62 -62
- package/lib/utils/snapshot.js +381 -0
- package/lib/utils/source-path.js +179 -179
- package/lib/utils/util.js +526 -526
- package/lib/v8/v8-summary.js +138 -138
- package/lib/v8/v8.js +399 -630
- package/package.json +81 -80
package/lib/utils/dedupe.js
CHANGED
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
|
|
2
|
-
const sortRanges = (ranges) => {
|
|
3
|
-
ranges.sort((a, b) => {
|
|
4
|
-
if (a.start === b.start) {
|
|
5
|
-
return a.end - b.end;
|
|
6
|
-
}
|
|
7
|
-
return a.start - b.start;
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const filterRanges = (ranges) => {
|
|
12
|
-
// remove start = end
|
|
13
|
-
return ranges.filter((range) => range.start < range.end);
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// apply directly to css ranges
|
|
17
|
-
const dedupeFlatRanges = (ranges) => {
|
|
18
|
-
|
|
19
|
-
ranges = filterRanges(ranges);
|
|
20
|
-
|
|
21
|
-
if (ranges.length < 2) {
|
|
22
|
-
return ranges;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
sortRanges(ranges);
|
|
26
|
-
|
|
27
|
-
ranges.reduce((prevRange, range) => {
|
|
28
|
-
|
|
29
|
-
// same start
|
|
30
|
-
if (range.start === prevRange.start) {
|
|
31
|
-
range.dedupe = true;
|
|
32
|
-
// equal prev
|
|
33
|
-
if (range.end === prevRange.end) {
|
|
34
|
-
return prevRange;
|
|
35
|
-
}
|
|
36
|
-
// great than the prev end, update the end
|
|
37
|
-
prevRange.end = range.end;
|
|
38
|
-
return prevRange;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// already in the range
|
|
42
|
-
if (range.end <= prevRange.end) {
|
|
43
|
-
range.dedupe = true;
|
|
44
|
-
return prevRange;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// collected, update the end
|
|
48
|
-
if (range.start <= prevRange.end) {
|
|
49
|
-
range.dedupe = true;
|
|
50
|
-
prevRange.end = range.end;
|
|
51
|
-
return prevRange;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return range;
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
ranges = ranges.filter((it) => !it.dedupe);
|
|
58
|
-
|
|
59
|
-
return ranges;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const mergeRangesWith = (ranges, comparer, handler) => {
|
|
63
|
-
|
|
64
|
-
// ranges format
|
|
65
|
-
// { start: 0, end: 6, ... }
|
|
66
|
-
|
|
67
|
-
ranges = filterRanges(ranges);
|
|
68
|
-
|
|
69
|
-
if (ranges.length < 2) {
|
|
70
|
-
return ranges;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
sortRanges(ranges);
|
|
74
|
-
|
|
75
|
-
let hasDedupe = false;
|
|
76
|
-
|
|
77
|
-
// merge count for same range
|
|
78
|
-
ranges.reduce((lastRange, range) => {
|
|
79
|
-
if (comparer(lastRange, range)) {
|
|
80
|
-
range.dedupe = true;
|
|
81
|
-
|
|
82
|
-
handler(lastRange, range);
|
|
83
|
-
|
|
84
|
-
hasDedupe = true;
|
|
85
|
-
|
|
86
|
-
return lastRange;
|
|
87
|
-
}
|
|
88
|
-
return range;
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
if (hasDedupe) {
|
|
92
|
-
// console.log(ranges);
|
|
93
|
-
ranges = ranges.filter((it) => !it.dedupe);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// console.log('ranges length after', ranges.length);
|
|
97
|
-
|
|
98
|
-
return ranges;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
// apply to js count ranges
|
|
102
|
-
const dedupeCountRanges = (ranges) => {
|
|
103
|
-
const comparer = (lastRange, range) => {
|
|
104
|
-
return lastRange.start === range.start && lastRange.end === range.end;
|
|
105
|
-
};
|
|
106
|
-
const handler = (lastRange, range) => {
|
|
107
|
-
lastRange.count += range.count;
|
|
108
|
-
};
|
|
109
|
-
return mergeRangesWith(ranges, comparer, handler);
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
module.exports = {
|
|
114
|
-
sortRanges,
|
|
115
|
-
dedupeFlatRanges,
|
|
116
|
-
mergeRangesWith,
|
|
117
|
-
dedupeCountRanges
|
|
118
|
-
};
|
|
1
|
+
|
|
2
|
+
const sortRanges = (ranges) => {
|
|
3
|
+
ranges.sort((a, b) => {
|
|
4
|
+
if (a.start === b.start) {
|
|
5
|
+
return a.end - b.end;
|
|
6
|
+
}
|
|
7
|
+
return a.start - b.start;
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const filterRanges = (ranges) => {
|
|
12
|
+
// remove start = end
|
|
13
|
+
return ranges.filter((range) => range.start < range.end);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// apply directly to css ranges
|
|
17
|
+
const dedupeFlatRanges = (ranges) => {
|
|
18
|
+
|
|
19
|
+
ranges = filterRanges(ranges);
|
|
20
|
+
|
|
21
|
+
if (ranges.length < 2) {
|
|
22
|
+
return ranges;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
sortRanges(ranges);
|
|
26
|
+
|
|
27
|
+
ranges.reduce((prevRange, range) => {
|
|
28
|
+
|
|
29
|
+
// same start
|
|
30
|
+
if (range.start === prevRange.start) {
|
|
31
|
+
range.dedupe = true;
|
|
32
|
+
// equal prev
|
|
33
|
+
if (range.end === prevRange.end) {
|
|
34
|
+
return prevRange;
|
|
35
|
+
}
|
|
36
|
+
// great than the prev end, update the end
|
|
37
|
+
prevRange.end = range.end;
|
|
38
|
+
return prevRange;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// already in the range
|
|
42
|
+
if (range.end <= prevRange.end) {
|
|
43
|
+
range.dedupe = true;
|
|
44
|
+
return prevRange;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// collected, update the end
|
|
48
|
+
if (range.start <= prevRange.end) {
|
|
49
|
+
range.dedupe = true;
|
|
50
|
+
prevRange.end = range.end;
|
|
51
|
+
return prevRange;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return range;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
ranges = ranges.filter((it) => !it.dedupe);
|
|
58
|
+
|
|
59
|
+
return ranges;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const mergeRangesWith = (ranges, comparer, handler) => {
|
|
63
|
+
|
|
64
|
+
// ranges format
|
|
65
|
+
// { start: 0, end: 6, ... }
|
|
66
|
+
|
|
67
|
+
ranges = filterRanges(ranges);
|
|
68
|
+
|
|
69
|
+
if (ranges.length < 2) {
|
|
70
|
+
return ranges;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
sortRanges(ranges);
|
|
74
|
+
|
|
75
|
+
let hasDedupe = false;
|
|
76
|
+
|
|
77
|
+
// merge count for same range
|
|
78
|
+
ranges.reduce((lastRange, range) => {
|
|
79
|
+
if (comparer(lastRange, range)) {
|
|
80
|
+
range.dedupe = true;
|
|
81
|
+
|
|
82
|
+
handler(lastRange, range);
|
|
83
|
+
|
|
84
|
+
hasDedupe = true;
|
|
85
|
+
|
|
86
|
+
return lastRange;
|
|
87
|
+
}
|
|
88
|
+
return range;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
if (hasDedupe) {
|
|
92
|
+
// console.log(ranges);
|
|
93
|
+
ranges = ranges.filter((it) => !it.dedupe);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// console.log('ranges length after', ranges.length);
|
|
97
|
+
|
|
98
|
+
return ranges;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// apply to js count ranges
|
|
102
|
+
const dedupeCountRanges = (ranges) => {
|
|
103
|
+
const comparer = (lastRange, range) => {
|
|
104
|
+
return lastRange.start === range.start && lastRange.end === range.end;
|
|
105
|
+
};
|
|
106
|
+
const handler = (lastRange, range) => {
|
|
107
|
+
lastRange.count += range.count;
|
|
108
|
+
};
|
|
109
|
+
return mergeRangesWith(ranges, comparer, handler);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
module.exports = {
|
|
114
|
+
sortRanges,
|
|
115
|
+
dedupeFlatRanges,
|
|
116
|
+
mergeRangesWith,
|
|
117
|
+
dedupeCountRanges
|
|
118
|
+
};
|
package/lib/utils/request.js
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
const http = require('http');
|
|
2
|
-
const https = require('https');
|
|
3
|
-
|
|
4
|
-
// minimal http request for get sourcemap json
|
|
5
|
-
const request = (options) => {
|
|
6
|
-
|
|
7
|
-
const url = `${options.url}`;
|
|
8
|
-
// console.log('request', url);
|
|
9
|
-
|
|
10
|
-
return new Promise((resolve) => {
|
|
11
|
-
|
|
12
|
-
const HTTP = url.startsWith('https') ? https : http;
|
|
13
|
-
|
|
14
|
-
HTTP.get(url, (res) => {
|
|
15
|
-
const { statusCode } = res;
|
|
16
|
-
|
|
17
|
-
// Any 2xx status code signals a successful response but here we're only checking for 200.
|
|
18
|
-
if (statusCode !== 200) {
|
|
19
|
-
// Consume response data to free up memory
|
|
20
|
-
res.resume();
|
|
21
|
-
const resErr = new Error(`Request Failed. Status Code: ${statusCode}`);
|
|
22
|
-
resolve([resErr, null]);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
res.setEncoding('utf8');
|
|
27
|
-
|
|
28
|
-
let rawData = '';
|
|
29
|
-
res.on('data', (chunk) => {
|
|
30
|
-
rawData += chunk;
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
res.on('end', () => {
|
|
34
|
-
|
|
35
|
-
let dataErr;
|
|
36
|
-
let data = rawData;
|
|
37
|
-
|
|
38
|
-
// parse json
|
|
39
|
-
const contentType = res.headers['content-type'];
|
|
40
|
-
if ((/^application\/json/).test(contentType)) {
|
|
41
|
-
try {
|
|
42
|
-
data = JSON.parse(rawData);
|
|
43
|
-
} catch (e) {
|
|
44
|
-
dataErr = e;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
res.data = data;
|
|
49
|
-
resolve([dataErr, res]);
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
}).on('error', (httpErr) => {
|
|
54
|
-
|
|
55
|
-
resolve([httpErr, null]);
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
module.exports = request;
|
|
1
|
+
const http = require('http');
|
|
2
|
+
const https = require('https');
|
|
3
|
+
|
|
4
|
+
// minimal http request for get sourcemap json
|
|
5
|
+
const request = (options) => {
|
|
6
|
+
|
|
7
|
+
const url = `${options.url}`;
|
|
8
|
+
// console.log('request', url);
|
|
9
|
+
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
|
|
12
|
+
const HTTP = url.startsWith('https') ? https : http;
|
|
13
|
+
|
|
14
|
+
HTTP.get(url, (res) => {
|
|
15
|
+
const { statusCode } = res;
|
|
16
|
+
|
|
17
|
+
// Any 2xx status code signals a successful response but here we're only checking for 200.
|
|
18
|
+
if (statusCode !== 200) {
|
|
19
|
+
// Consume response data to free up memory
|
|
20
|
+
res.resume();
|
|
21
|
+
const resErr = new Error(`Request Failed. Status Code: ${statusCode}`);
|
|
22
|
+
resolve([resErr, null]);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
res.setEncoding('utf8');
|
|
27
|
+
|
|
28
|
+
let rawData = '';
|
|
29
|
+
res.on('data', (chunk) => {
|
|
30
|
+
rawData += chunk;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
res.on('end', () => {
|
|
34
|
+
|
|
35
|
+
let dataErr;
|
|
36
|
+
let data = rawData;
|
|
37
|
+
|
|
38
|
+
// parse json
|
|
39
|
+
const contentType = res.headers['content-type'];
|
|
40
|
+
if ((/^application\/json/).test(contentType)) {
|
|
41
|
+
try {
|
|
42
|
+
data = JSON.parse(rawData);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
dataErr = e;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
res.data = data;
|
|
49
|
+
resolve([dataErr, res]);
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
}).on('error', (httpErr) => {
|
|
54
|
+
|
|
55
|
+
resolve([httpErr, null]);
|
|
56
|
+
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
module.exports = request;
|