Skip to content

Commit afa7eaa

Browse files
committed
Remove use of eval on supported platforms
1 parent 6d59c85 commit afa7eaa

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

index.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
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

Comments
 (0)