1
1
import { roundNumber } from "../helpers/misc" ;
2
2
import { toInt } from "../helpers/parse" ;
3
- import { Entry , Har , PageTimings } from "../typing/har" ;
3
+ import {
4
+ Entry ,
5
+ Har ,
6
+ Page ,
7
+ PageTimings ,
8
+ } from "../typing/har" ;
4
9
import {
5
10
Mark ,
6
11
TimingType ,
@@ -28,10 +33,11 @@ import {
28
33
export function transformDoc ( harData : Har ) : WaterfallDocs {
29
34
// make sure it's the *.log base node
30
35
let data = ( harData [ "log" ] !== undefined ? harData [ "log" ] : harData ) as Har ;
31
- console . log ( "HAR created by %s(%s) %s page(s)" , data . creator . name , data . creator . version , data . pages . length ) ;
36
+ const pages = getPages ( data ) ;
37
+ console . log ( "HAR created by %s(%s) %s page(s)" , data . creator . name , data . creator . version , pages . length ) ;
32
38
33
39
return {
34
- pages : data . pages . map ( ( _page , i ) => this . transformPage ( data , i ) ) ,
40
+ pages : pages . map ( ( _page , i ) => this . transformPage ( data , i ) ) ,
35
41
} ;
36
42
}
37
43
@@ -57,6 +63,25 @@ function toWaterFallEntry(entry: Entry, index: number, startRelative: number, is
57
63
) ;
58
64
}
59
65
66
+ /** retuns the page or a mock page object */
67
+ function getPages ( data : Har ) {
68
+ if ( data . pages && data . pages . length > 0 ) {
69
+ return data . pages ;
70
+ }
71
+ const statedTime = data . entries . reduce ( ( earliest , curr ) => {
72
+ const currDate = Date . parse ( curr . startedDateTime ) ;
73
+ const earliestDate = Date . parse ( earliest ) ;
74
+ return earliestDate < currDate ? earliest : curr . startedDateTime ;
75
+ } , data . entries [ 0 ] . startedDateTime ) ;
76
+ console . log ( statedTime ) ;
77
+ return [ {
78
+ id : "" ,
79
+ pageTimings : { } ,
80
+ startedDateTime : data . entries [ 0 ] . startedDateTime ,
81
+ title : "n/a" ,
82
+ } as Page ] ;
83
+ }
84
+
60
85
/**
61
86
* Transforms a HAR object into the format needed to render the PerfCascade
62
87
* @param {Har } harData - HAR document
@@ -67,16 +92,22 @@ export function transformPage(harData: Har, pageIndex: number = 0): WaterfallDat
67
92
// make sure it's the *.log base node
68
93
let data = ( harData [ "log" ] !== undefined ? harData [ "log" ] : harData ) as Har ;
69
94
70
- const currPage = data . pages [ pageIndex ] ;
95
+ const pages = getPages ( data ) ;
96
+ const currPage = pages [ pageIndex ] ;
71
97
const pageStartTime = new Date ( currPage . startedDateTime ) . getTime ( ) ;
72
98
const pageTimings = currPage . pageTimings ;
73
99
74
- console . log ( "%s: %s of %s page(s)" , currPage . title , pageIndex + 1 , data . pages . length ) ;
100
+ console . log ( "%s: %s of %s page(s)" , currPage . title , pageIndex + 1 , pages . length ) ;
75
101
76
102
let doneTime = 0 ;
77
103
const isTLS = documentIsSecure ( data . entries ) ;
78
104
const entries = data . entries
79
- . filter ( ( entry ) => entry . pageref === currPage . id )
105
+ . filter ( ( entry ) => {
106
+ if ( pages . length === 1 && currPage . id === "" ) {
107
+ return true ;
108
+ }
109
+ return entry . pageref === currPage . id ;
110
+ } )
80
111
. map ( ( entry , index ) => {
81
112
const startRelative = new Date ( entry . startedDateTime ) . getTime ( ) - pageStartTime ;
82
113
doneTime = Math . max ( doneTime , startRelative + entry . time ) ;
0 commit comments