File tree 2 files changed +43
-0
lines changed
2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -160,6 +160,37 @@ function createDebug(namespace) {
160
160
return section ;
161
161
} ;
162
162
163
+ debug . time = function ( ) {
164
+ var args = [ ] . slice . call ( arguments ) ;
165
+ if ( args . length < 2 ) {
166
+ throw new Error ( 'debug.time() takes at least a debug string and a function' ) ;
167
+ }
168
+
169
+ var fn = args . pop ( ) ;
170
+ if ( typeof fn !== 'function' ) {
171
+ throw new Error ( 'the last argument to debug.time() must be a function' ) ;
172
+ }
173
+
174
+ var isPromise = false ;
175
+ var section = debug . begin . apply ( debug , args ) ;
176
+ try {
177
+ var result = fn ( ) ;
178
+
179
+ if ( typeof Promise === 'function' && result instanceof Promise ) { // eslint-disable-line no-undef
180
+ isPromise = true ;
181
+ result . then ( function ( ) {
182
+ section . end ( ) ;
183
+ } ) ;
184
+ }
185
+
186
+ return result ;
187
+ } finally {
188
+ if ( ! isPromise ) {
189
+ section . end ( ) ;
190
+ }
191
+ }
192
+ } ;
193
+
163
194
// env-specific initialization logic for debug instances
164
195
if ( 'function' === typeof exports . init ) {
165
196
exports . init ( debug ) ;
Original file line number Diff line number Diff line change @@ -82,6 +82,18 @@ describe('debug', function () {
82
82
83
83
expect ( log . log ) . to . have . been . calledThrice ;
84
84
} ) ;
85
+
86
+ it ( 'times a critical function' , function ( ) {
87
+ log . log = sinon . spy ( ) ;
88
+
89
+ var result = log . time ( 'a critical function' , function ( ) {
90
+ log ( 'hello from inside' ) ;
91
+ return 1234 ;
92
+ } ) ;
93
+
94
+ expect ( result ) . to . equal ( 1234 ) ;
95
+ expect ( log . log ) . to . have . been . calledThrice ;
96
+ } ) ;
85
97
} ) ;
86
98
} ) ;
87
99
} ) ;
You can’t perform that action at this time.
0 commit comments