-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
minify-devtoolslog.js
86 lines (74 loc) · 1.96 KB
/
minify-devtoolslog.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
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable no-console */
/**
* @fileoverview Minifies a devtools log by removing noisy header values, eliminating data URIs, etc.
*/
const headersToKeep = new Set([
// Request headers
'accept',
'accept-encoding',
'accept-ranges',
// Response headers
'status',
'content-length',
'content-type',
'content-encoding',
'content-range',
'etag',
'cache-control',
'last-modified',
'link',
'x-robots-tag',
]);
/** @param {LH.Crdp.Network.Headers} [headers] */
function cleanHeaders(headers) {
if (!headers) return;
for (const key of Object.keys(headers)) {
if (!headersToKeep.has(key.toLowerCase())) delete headers[key];
}
}
/** @param {{url: string}} obj */
function cleanDataURI(obj) {
obj.url = obj.url.replace(/^(data:.*?base64,).*/, '$1FILLER');
}
/** @param {LH.Crdp.Network.Response} [response] */
function cleanResponse(response) {
if (!response) return;
cleanDataURI(response);
cleanHeaders(response.requestHeaders);
cleanHeaders(response.headers);
response.securityDetails = undefined;
response.headersText = undefined;
response.requestHeadersText = undefined;
/** @type {any} */
const timing = response.timing || {};
for (const [k, v] of Object.entries(timing)) {
if (v === -1) timing[k] = undefined;
}
}
/**
* @param {LH.DevtoolsLog} log
* @return {LH.DevtoolsLog}
*/
function minifyDevtoolsLog(log) {
return log.map(original => {
/** @type {LH.Protocol.RawEventMessage} */
const entry = JSON.parse(JSON.stringify(original));
switch (entry.method) {
case 'Network.requestWillBeSent':
cleanDataURI(entry.params.request);
cleanHeaders(entry.params.request.headers);
cleanResponse(entry.params.redirectResponse);
break;
case 'Network.responseReceived':
cleanResponse(entry.params.response);
break;
}
return entry;
});
}
export {minifyDevtoolsLog};