UNPKG

1.53 kBPlain TextView Raw
1import {set} from './utilities';
2
3type UserTimingMock = typeof window.performance.timing;
4
5export default class Performance {
6 private isUsingMockUserTiming = false;
7 private originalUserTiming?: UserTimingMock;
8
9 mock(timing: Partial<UserTimingMock> = {}) {
10 if (this.isUsingMockUserTiming) {
11 throw new Error(
12 'You tried to mock window.performance.timing when it was already mocked.',
13 );
14 }
15
16 this.originalUserTiming = window.performance.timing;
17
18 const mockTiming: Partial<UserTimingMock> = {
19 navigationStart: 0,
20 unloadEventStart: 0,
21 unloadEventEnd: 0,
22 redirectStart: 0,
23 redirectEnd: 0,
24 fetchStart: 0,
25 domainLookupStart: 0,
26 domainLookupEnd: 0,
27 connectStart: 0,
28 connectEnd: 0,
29 secureConnectionStart: 0,
30 requestStart: 0,
31 responseStart: 0,
32 responseEnd: 0,
33 domLoading: 0,
34 domInteractive: 0,
35 domContentLoadedEventStart: 0,
36 domContentLoadedEventEnd: 0,
37 domComplete: 0,
38 loadEventStart: 0,
39 loadEventEnd: 0,
40 ...timing,
41 };
42
43 set(window.performance, 'timing', mockTiming);
44 this.isUsingMockUserTiming = true;
45 }
46
47 restore() {
48 if (!this.isUsingMockUserTiming) {
49 throw new Error(
50 'You tried to restore window.performance.timing when it was already restored.',
51 );
52 }
53
54 set(window.performance, 'timing', this.originalUserTiming);
55 this.isUsingMockUserTiming = false;
56 }
57
58 isMocked() {
59 return this.isUsingMockUserTiming;
60 }
61}