Skip to content

Commit dc99086

Browse files
committed
Replace function constructor with defineProperty to preserve arity without eval [#41]
1 parent 73364d0 commit dc99086

File tree

1 file changed

+6
-23
lines changed

1 file changed

+6
-23
lines changed

index.js

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,6 @@ function convertDataDescriptorToAccessor (obj, prop, message) {
6464
return descriptor
6565
}
6666

67-
/**
68-
* Create arguments string to keep arity.
69-
*/
70-
71-
function createArgumentsString (arity) {
72-
var str = ''
73-
74-
for (var i = 0; i < arity; i++) {
75-
str += ', arg' + i
76-
}
77-
78-
return str.substr(2)
79-
}
80-
8167
/**
8268
* Create stack string from stack.
8369
*/
@@ -415,20 +401,17 @@ function wrapfunction (fn, message) {
415401
throw new TypeError('argument fn must be a function')
416402
}
417403

418-
var args = createArgumentsString(fn.length)
404+
var deprecate = this
419405
var stack = getStack()
420406
var site = callSiteLocation(stack[1])
421407

422408
site.name = fn.name
423409

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)
431-
410+
function deprecatedfn () {
411+
log.call(deprecate, message, site)
412+
return fn.apply(this, arguments)
413+
}
414+
Object.defineProperty(deprecatedfn, 'length', { value: fn.length })
432415
return deprecatedfn
433416
}
434417

0 commit comments

Comments
 (0)