File tree Expand file tree Collapse file tree 3 files changed +52
-1
lines changed
Expand file tree Collapse file tree 3 files changed +52
-1
lines changed Original file line number Diff line number Diff line change 1919
2020## Usage
2121``` js
22- ' use strict' ;
2322const https = require (' https' );
2423const timer = require (' @szmarczak/http-timer' );
2524
@@ -83,6 +82,27 @@ If something has not been measured yet, it will be `undefined`.
8382
8483** Note** : The time is a ` number ` representing the milliseconds elapsed since the UNIX epoch.
8584
85+ You can also access the timings through ` request.timings ` or ` response.timings ` :
86+
87+ ``` js
88+ const https = require (' https' );
89+ const timer = require (' @szmarczak/http-timer' );
90+
91+ const request = https .get (' https://httpbin.org/anything' );
92+ const timings = timer (request);
93+
94+ console .log (request .timings === timings);
95+ // => true
96+
97+ request .on (' response' , response => {
98+ response .on (' data' , () => {}); // Consume the data somehow
99+ response .on (' end' , () => {
100+ console .log (response .timings === timings);
101+ // => true
102+ });
103+ });
104+ ```
105+
86106## License
87107
88108MIT
Original file line number Diff line number Diff line change @@ -25,6 +25,16 @@ export interface Timings {
2525 } ;
2626}
2727
28+ declare module 'http' {
29+ interface ClientRequest {
30+ timings ?: Timings ;
31+ }
32+
33+ interface IncomingMessage {
34+ timings ?: Timings ;
35+ }
36+ }
37+
2838const timer = ( request : ClientRequest ) : Timings => {
2939 const timings : Timings = {
3040 start : Date . now ( ) ,
@@ -48,6 +58,8 @@ const timer = (request: ClientRequest): Timings => {
4858 }
4959 } ;
5060
61+ request . timings = timings ;
62+
5163 const handleError = ( origin : EventEmitter ) : void => {
5264 const emit = origin . emit . bind ( origin ) ;
5365 origin . emit = ( event , ...args ) => {
@@ -108,6 +120,8 @@ const timer = (request: ClientRequest): Timings => {
108120 timings . response = Date . now ( ) ;
109121 timings . phases . firstByte = timings . response - timings . upload ! ;
110122
123+ response . timings = timings ;
124+
111125 handleError ( response ) ;
112126
113127 response . prependOnceListener ( 'end' , ( ) => {
Original file line number Diff line number Diff line change @@ -222,3 +222,20 @@ test('no `tls` phase for http requests', async t => {
222222 t . is ( timings . secureConnect , undefined ) ;
223223 t . is ( timings . phases . tls , undefined ) ;
224224} ) ;
225+
226+ test ( 'timings are accessible via `request.timings`' , t => {
227+ const { request, timings} = makeRequest ( 'https://google.com' ) ;
228+ request . abort ( ) ;
229+
230+ t . is ( request . timings , timings ) ;
231+ } ) ;
232+
233+ test ( 'timings are accessible via `response.timings`' , async t => {
234+ const { request, timings} = makeRequest ( 'https://google.com' ) ;
235+
236+ const response = await pEvent ( request , 'response' ) ;
237+ t . is ( response . timings , timings ) ;
238+
239+ response . resume ( ) ;
240+ await pEvent ( response , 'end' ) ;
241+ } ) ;
You can’t perform that action at this time.
0 commit comments