@@ -421,13 +421,30 @@ function wrapfunction (fn, message) {
421421
422422 site . name = fn . name
423423
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+ var 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+ }
431448
432449 return deprecatedfn
433450}
0 commit comments