|
1 |
| -import { isInStatusCodeRange, roundNumber } from "../helpers/misc"; |
| 1 | +import { roundNumber } from "../helpers/misc"; |
2 | 2 | import { toInt } from "../helpers/parse";
|
3 | 3 | import { Entry, Har, PageTimings } from "../typing/har";
|
4 | 4 | import {
|
5 |
| - Icon, |
6 | 5 | Mark,
|
7 | 6 | TimingType,
|
8 | 7 | WaterfallData,
|
9 | 8 | WaterfallDocs,
|
10 |
| - WaterfallEntry, |
11 | 9 | WaterfallEntryIndicator,
|
12 |
| - WaterfallEntryTab, |
13 | 10 | WaterfallEntryTiming,
|
14 | 11 | WaterfallResponseDetails,
|
15 | 12 | } from "../typing/waterfall";
|
16 |
| -import { makeIcon } from "../waterfall/row/svg-indicators"; |
17 | 13 | import { collectIndicators, documentIsSecure } from "./har-heuristics";
|
18 | 14 | import { makeTabs } from "./har-tabs";
|
19 |
| -import { mimeToRequestType } from "./helpers"; |
20 |
| - |
21 |
| -function createWaterfallEntry(url: string, |
22 |
| - start: number, |
23 |
| - end: number, |
24 |
| - segments: WaterfallEntryTiming[] = [], |
25 |
| - responseDetails: WaterfallResponseDetails, |
26 |
| - tabs: WaterfallEntryTab[]): WaterfallEntry { |
27 |
| - const total = (typeof start !== "number" || typeof end !== "number") ? undefined : (end - start); |
28 |
| - return { |
29 |
| - total, |
30 |
| - url, |
31 |
| - start, |
32 |
| - end, |
33 |
| - segments, |
34 |
| - responseDetails, |
35 |
| - tabs, |
36 |
| - }; |
37 |
| -} |
38 |
| - |
39 |
| -function createWaterfallEntryTiming(type: TimingType, |
40 |
| - start: number, |
41 |
| - end: number): WaterfallEntryTiming { |
42 |
| - const total = (typeof start !== "number" || typeof end !== "number") ? undefined : (end - start); |
43 |
| - return { |
44 |
| - total, |
45 |
| - type, |
46 |
| - start, |
47 |
| - end, |
48 |
| - }; |
49 |
| -} |
| 15 | +import { |
| 16 | + createWaterfallEntry, |
| 17 | + createWaterfallEntryTiming, |
| 18 | + makeMimeTypeIcon, |
| 19 | + makeRowCssClasses, |
| 20 | + mimeToRequestType, |
| 21 | +} from "./helpers"; |
50 | 22 |
|
51 | 23 | /**
|
52 | 24 | * Transforms the full HAR doc, including all pages
|
@@ -197,50 +169,20 @@ function getTimePair(key: string, harEntry: Entry, collect: WaterfallEntryTiming
|
197 | 169 | };
|
198 | 170 | }
|
199 | 171 |
|
| 172 | +/** |
| 173 | + * Helper to create a requests `WaterfallResponseDetails` |
| 174 | + * |
| 175 | + * @param {Entry} entry |
| 176 | + * @param {WaterfallEntryIndicator[]} indicators |
| 177 | + * @returns WaterfallResponseDetails |
| 178 | + */ |
200 | 179 | function createResponseDetails(entry: Entry, indicators: WaterfallEntryIndicator[]): WaterfallResponseDetails {
|
201 | 180 | const requestType = mimeToRequestType(entry.response.content.mimeType);
|
202 |
| - |
203 | 181 | return {
|
204 |
| - icon: getMimeTypeIcon(entry, requestType), |
205 |
| - rowClass: getRowCssClasses(entry), |
| 182 | + icon: makeMimeTypeIcon(entry.response.status, entry.response.statusText, requestType, entry.response.redirectURL), |
| 183 | + rowClass: makeRowCssClasses(entry.response.status), |
206 | 184 | indicators,
|
207 | 185 | requestType,
|
208 | 186 | statusCode: entry.response.status,
|
209 | 187 | };
|
210 | 188 | }
|
211 |
| - |
212 |
| -/** |
213 |
| - * Scan the request for errors or potential issues and highlight them |
214 |
| - * @param {Entry} entry |
215 |
| - * @returns {Icon} |
216 |
| - */ |
217 |
| -function getMimeTypeIcon(entry: Entry, requestType): Icon { |
218 |
| - const status = entry.response.status; |
219 |
| - // highlight redirects |
220 |
| - if (!!entry.response.redirectURL) { |
221 |
| - const url = encodeURI(entry.response.redirectURL.split("?")[0] || ""); |
222 |
| - return makeIcon("err3xx", `${status} response status: Redirect to ${url}...`); |
223 |
| - } else if (isInStatusCodeRange(status, 400, 499)) { |
224 |
| - return makeIcon("err4xx", `${status} response status: ${entry.response.statusText}`); |
225 |
| - } else if (isInStatusCodeRange(status, 500, 599)) { |
226 |
| - return makeIcon("err5xx", `${status} response status: ${entry.response.statusText}`); |
227 |
| - } else if (status === 204) { |
228 |
| - return makeIcon("plain", "No content"); |
229 |
| - } else { |
230 |
| - return makeIcon(requestType, requestType); |
231 |
| - } |
232 |
| -} |
233 |
| - |
234 |
| -function getRowCssClasses(entry: Entry): string { |
235 |
| - const classes = ["row-item"]; |
236 |
| - if (isInStatusCodeRange(entry.response.status, 500, 599)) { |
237 |
| - classes.push("status5xx"); |
238 |
| - } else if (isInStatusCodeRange(entry.response.status, 400, 499)) { |
239 |
| - classes.push("status4xx"); |
240 |
| - } else if (entry.response.status !== 304 && |
241 |
| - isInStatusCodeRange(entry.response.status, 300, 399)) { |
242 |
| - // 304 == Not Modified, so not an issue |
243 |
| - classes.push("status3xx"); |
244 |
| - } |
245 |
| - return classes.join(" "); |
246 |
| -} |
0 commit comments