lighthouse 9.5.0-dev.20220622 → 9.5.0-dev.20220623
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/lighthouse-core/fraggle-rock/gather/session.js +1 -1
- package/lighthouse-core/gather/driver/network-monitor.js +9 -26
- package/lighthouse-core/gather/driver/target-manager.js +2 -2
- package/lighthouse-core/lib/network-recorder.js +9 -18
- package/package.json +1 -1
- package/types/protocol.d.ts +8 -1
|
@@ -11,7 +11,7 @@ const LHError = require('../../lib/lh-error.js');
|
|
|
11
11
|
// Controls how long to wait for a response after sending a DevTools protocol command.
|
|
12
12
|
const DEFAULT_PROTOCOL_TIMEOUT = 30000;
|
|
13
13
|
|
|
14
|
-
/** @typedef {
|
|
14
|
+
/** @typedef {LH.Protocol.StrictEventEmitterClass<LH.CrdpEvents>} CrdpEventMessageEmitter */
|
|
15
15
|
const CrdpEventEmitter = /** @type {CrdpEventMessageEmitter} */ (EventEmitter);
|
|
16
16
|
|
|
17
17
|
/** @implements {LH.Gatherer.FRProtocolSession} */
|
|
@@ -16,14 +16,14 @@ const NetworkRecorder = require('../../lib/network-recorder.js');
|
|
|
16
16
|
const NetworkRequest = require('../../lib/network-request.js');
|
|
17
17
|
const URL = require('../../lib/url-shim.js');
|
|
18
18
|
|
|
19
|
-
/** @typedef {import('../../lib/network-recorder.js').
|
|
19
|
+
/** @typedef {import('../../lib/network-recorder.js').NetworkRecorderEventMap} NetworkRecorderEventMap */
|
|
20
20
|
/** @typedef {'network-2-idle'|'network-critical-idle'|'networkidle'|'networkbusy'|'network-critical-busy'|'network-2-busy'} NetworkMonitorEvent_ */
|
|
21
|
-
/** @typedef {
|
|
22
|
-
/** @typedef {
|
|
23
|
-
/** @typedef {LH.Protocol.
|
|
21
|
+
/** @typedef {Record<NetworkMonitorEvent_, []> & NetworkRecorderEventMap} NetworkMonitorEventMap */
|
|
22
|
+
/** @typedef {keyof NetworkMonitorEventMap} NetworkMonitorEvent */
|
|
23
|
+
/** @typedef {LH.Protocol.StrictEventEmitterClass<NetworkMonitorEventMap>} NetworkMonitorEmitter */
|
|
24
|
+
const NetworkMonitorEventEmitter = /** @type {NetworkMonitorEmitter} */ (EventEmitter);
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
class NetworkMonitor {
|
|
26
|
+
class NetworkMonitor extends NetworkMonitorEventEmitter {
|
|
27
27
|
/** @type {NetworkRecorder|undefined} */
|
|
28
28
|
_networkRecorder = undefined;
|
|
29
29
|
/** @type {Array<LH.Crdp.Page.Frame>} */
|
|
@@ -32,6 +32,8 @@ class NetworkMonitor {
|
|
|
32
32
|
// TODO(FR-COMPAT): switch to real TargetManager when legacy removed.
|
|
33
33
|
/** @param {LH.Gatherer.FRTransitionalDriver['targetManager']} targetManager */
|
|
34
34
|
constructor(targetManager) {
|
|
35
|
+
super();
|
|
36
|
+
|
|
35
37
|
/** @type {LH.Gatherer.FRTransitionalDriver['targetManager']} */
|
|
36
38
|
this._targetManager = targetManager;
|
|
37
39
|
|
|
@@ -46,25 +48,6 @@ class NetworkMonitor {
|
|
|
46
48
|
if (!this._networkRecorder) return;
|
|
47
49
|
this._networkRecorder.dispatch(event);
|
|
48
50
|
};
|
|
49
|
-
|
|
50
|
-
// Attach the event emitter types to this class.
|
|
51
|
-
const emitter = /** @type {NetworkMonitorEmitter} */ (new EventEmitter());
|
|
52
|
-
/** @type {typeof emitter['emit']} */
|
|
53
|
-
this.emit = emitter.emit.bind(emitter);
|
|
54
|
-
/** @type {typeof emitter['on']} */
|
|
55
|
-
this.on = emitter.on.bind(emitter);
|
|
56
|
-
/** @type {typeof emitter['once']} */
|
|
57
|
-
this.once = emitter.once.bind(emitter);
|
|
58
|
-
/** @type {typeof emitter['off']} */
|
|
59
|
-
this.off = emitter.off.bind(emitter);
|
|
60
|
-
/** @type {typeof emitter['addListener']} */
|
|
61
|
-
this.addListener = emitter.addListener.bind(emitter);
|
|
62
|
-
/** @type {typeof emitter['removeListener']} */
|
|
63
|
-
this.removeListener = emitter.removeListener.bind(emitter);
|
|
64
|
-
/** @type {typeof emitter['removeAllListeners']} */
|
|
65
|
-
this.removeAllListeners = emitter.removeAllListeners.bind(emitter);
|
|
66
|
-
/** @type {typeof emitter['listenerCount']} */
|
|
67
|
-
this.listenerCount = emitter.listenerCount.bind(emitter);
|
|
68
51
|
}
|
|
69
52
|
|
|
70
53
|
/**
|
|
@@ -78,7 +61,7 @@ class NetworkMonitor {
|
|
|
78
61
|
|
|
79
62
|
/**
|
|
80
63
|
* Reemit the same network recorder events.
|
|
81
|
-
* @param {
|
|
64
|
+
* @param {keyof NetworkRecorderEventMap} event
|
|
82
65
|
* @return {(r: NetworkRequest) => void}
|
|
83
66
|
*/
|
|
84
67
|
const reEmit = event => r => {
|
|
@@ -19,8 +19,8 @@ const ProtocolSession = require('../../fraggle-rock/gather/session.js');
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
// Add protocol event types to EventEmitter.
|
|
22
|
-
/** @typedef {{'protocolevent': [LH.Protocol.RawEventMessage]}}
|
|
23
|
-
/** @typedef {
|
|
22
|
+
/** @typedef {{'protocolevent': [LH.Protocol.RawEventMessage]}} ProtocolEventMap */
|
|
23
|
+
/** @typedef {LH.Protocol.StrictEventEmitterClass<ProtocolEventMap>} ProtocolEventMessageEmitter */
|
|
24
24
|
const ProtocolEventEmitter = /** @type {ProtocolEventMessageEmitter} */ (EventEmitter);
|
|
25
25
|
|
|
26
26
|
/**
|
|
@@ -9,9 +9,16 @@ const log = require('lighthouse-logger');
|
|
|
9
9
|
const NetworkRequest = require('./network-request.js');
|
|
10
10
|
const EventEmitter = require('events').EventEmitter;
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {{
|
|
14
|
+
* requeststarted: [NetworkRequest],
|
|
15
|
+
* requestfinished: [NetworkRequest],
|
|
16
|
+
* }} NetworkRecorderEventMap
|
|
17
|
+
*/
|
|
18
|
+
/** @typedef {LH.Protocol.StrictEventEmitterClass<NetworkRecorderEventMap>} RequestEmitter */
|
|
19
|
+
const RequestEventEmitter = /** @type {RequestEmitter} */ (EventEmitter);
|
|
13
20
|
|
|
14
|
-
class NetworkRecorder extends
|
|
21
|
+
class NetworkRecorder extends RequestEventEmitter {
|
|
15
22
|
/**
|
|
16
23
|
* Creates an instance of NetworkRecorder.
|
|
17
24
|
*/
|
|
@@ -35,22 +42,6 @@ class NetworkRecorder extends EventEmitter {
|
|
|
35
42
|
return Array.from(this._records);
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
/**
|
|
39
|
-
* @param {NetworkRecorderEvent} event
|
|
40
|
-
* @param {*} listener
|
|
41
|
-
*/
|
|
42
|
-
on(event, listener) {
|
|
43
|
-
return super.on(event, listener);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @param {NetworkRecorderEvent} event
|
|
48
|
-
* @param {*} listener
|
|
49
|
-
*/
|
|
50
|
-
once(event, listener) {
|
|
51
|
-
return super.once(event, listener);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
45
|
/**
|
|
55
46
|
* Listener for the DevTools SDK NetworkManager's RequestStarted event, which includes both
|
|
56
47
|
* web socket and normal request creation.
|
package/package.json
CHANGED
package/types/protocol.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ declare module Protocol {
|
|
|
53
53
|
* serve as the arguments to event listener callbacks.
|
|
54
54
|
* Inspired by work from https://github.com/bterlson/strict-event-emitter-types.
|
|
55
55
|
*/
|
|
56
|
-
type StrictEventEmitter<TEventRecord extends Record<keyof TEventRecord,
|
|
56
|
+
type StrictEventEmitter<TEventRecord extends Record<keyof TEventRecord, unknown[]>> = {
|
|
57
57
|
on<E extends keyof TEventRecord>(event: E, listener: (...args: TEventRecord[E]) => void): void;
|
|
58
58
|
|
|
59
59
|
off<E extends keyof TEventRecord>(event: E, listener: Function): void;
|
|
@@ -70,6 +70,13 @@ declare module Protocol {
|
|
|
70
70
|
|
|
71
71
|
listenerCount<E extends keyof TEventRecord>(event: E): number;
|
|
72
72
|
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* A constructable StrictEventEmitter.
|
|
76
|
+
*/
|
|
77
|
+
interface StrictEventEmitterClass<TEventRecord extends Record<keyof TEventRecord, unknown[]>> {
|
|
78
|
+
new(): StrictEventEmitter<TEventRecord>;
|
|
79
|
+
}
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
export default Protocol;
|