@@ -421,13 +421,30 @@ function wrapfunction (fn, message) {
421
421
422
422
site . name = fn . name
423
423
424
- // eslint-disable-next-line no-new-func
425
- var deprecatedfn = new Function ( 'fn' , 'log' , 'deprecate' , 'message' , 'site' ,
426
- '"use strict"\n' +
427
- 'return function (' + args + ') {' +
428
- 'log.call(deprecate, message, site)\n' +
429
- 'return fn.apply(this, arguments)\n' +
430
- '}' ) ( fn , log , this , message , site )
424
+ var deprecatedfn
425
+ var self = this
426
+ if ( Object . defineProperty ) {
427
+ try {
428
+ deprecatedfn = function ( ) {
429
+ 'use strict'
430
+ log . call ( self , message , site )
431
+ return fn . apply ( this , arguments )
432
+ }
433
+ Object . defineProperty ( deprecatedfn , 'length' , { value : fn . length } )
434
+ Object . defineProperty ( deprecatedfn , 'name' , { value : fn . name } )
435
+ } catch ( err ) {
436
+ // some node verions don't allow redefining of length, ignore them and fallback to eval
437
+ }
438
+ }
439
+ if ( ! deprecatedfn || deprecatedfn . length !== fn . length || deprecatedfn . name !== fn . name ) {
440
+ // eslint-disable-next-line no-new-func
441
+ deprecatedfn = new Function ( 'fn' , 'log' , 'deprecate' , 'message' , 'site' ,
442
+ '"use strict"\n' +
443
+ 'return function (' + args + ') {' +
444
+ 'log.call(deprecate, message, site)\n' +
445
+ 'return fn.apply(this, arguments)\n' +
446
+ '}' ) ( fn , log , this , message , site )
447
+ }
431
448
432
449
return deprecatedfn
433
450
}
0 commit comments