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.
@@ -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 {new () => LH.Protocol.StrictEventEmitter<LH.CrdpEvents>} CrdpEventMessageEmitter */
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').NetworkRecorderEvent} NetworkRecorderEvent */
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 {NetworkRecorderEvent|NetworkMonitorEvent_} NetworkMonitorEvent */
22
- /** @typedef {Record<NetworkMonitorEvent_, []> & Record<NetworkRecorderEvent, [NetworkRequest]>} NetworkMonitorEventMap */
23
- /** @typedef {LH.Protocol.StrictEventEmitter<NetworkMonitorEventMap>} NetworkMonitorEmitter */
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
- /** @implements {NetworkMonitorEmitter} */
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 {NetworkRecorderEvent} event
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]}} ProtocolEventRecord */
23
- /** @typedef {new () => LH.Protocol.StrictEventEmitter<ProtocolEventRecord>} ProtocolEventMessageEmitter */
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
- /** @typedef {'requeststarted'|'requestfinished'} NetworkRecorderEvent */
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 EventEmitter {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lighthouse",
3
- "version": "9.5.0-dev.20220622",
3
+ "version": "9.5.0-dev.20220623",
4
4
  "description": "Automated auditing, performance metrics, and best practices for the web.",
5
5
  "main": "./lighthouse-core/index.js",
6
6
  "bin": {
@@ -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, any[]>> = {
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;