@@ -7,33 +7,34 @@ module.exports = thenify
7
7
/**
8
8
* Turn async functions into promises
9
9
*
10
- * @param {Function } $$__fn__$$
10
+ * @param {Function } fn
11
11
* @return {Function }
12
12
* @api public
13
13
*/
14
14
15
- function thenify ( $$__fn__$$ , options ) {
16
- assert ( typeof $$__fn__$$ === 'function' )
17
- return eval ( createWrapper ( $$__fn__$$ . name , options ) )
15
+ function thenify ( fn , options ) {
16
+ assert ( typeof fn === 'function' )
17
+ return createWrapper ( fn , options )
18
18
}
19
19
20
20
/**
21
21
* Turn async functions into promises and backward compatible with callback
22
22
*
23
- * @param {Function } $$__fn__$$
23
+ * @param {Function } fn
24
24
* @return {Function }
25
25
* @api public
26
26
*/
27
27
28
- thenify . withCallback = function ( $$__fn__$$ , options ) {
29
- assert ( typeof $$__fn__$$ === 'function' )
28
+ thenify . withCallback = function ( fn , options ) {
29
+ assert ( typeof fn === 'function' )
30
30
options = options || { }
31
31
options . withCallback = true
32
- if ( options . multiArgs === undefined ) options . multiArgs = true
33
- return eval ( createWrapper ( $$__fn__$$ . name , options ) )
32
+ return createWrapper ( fn , options )
34
33
}
35
34
36
35
function createCallback ( resolve , reject , multiArgs ) {
36
+ // default to true
37
+ if ( multiArgs === undefined ) multiArgs = true
37
38
return function ( err , value ) {
38
39
if ( err ) return reject ( err )
39
40
var length = arguments . length
@@ -52,29 +53,25 @@ function createCallback(resolve, reject, multiArgs) {
52
53
}
53
54
}
54
55
55
- function createWrapper ( name , options ) {
56
- name = ( name || '' ) . replace ( / \s | b o u n d (? ! $ ) / g, '' )
56
+ function createWrapper ( fn , options ) {
57
57
options = options || { }
58
- // default to true
59
- var multiArgs = options . multiArgs !== undefined ? options . multiArgs : true
60
- multiArgs = 'var multiArgs = ' + JSON . stringify ( multiArgs ) + '\n'
61
-
62
- var withCallback = options . withCallback ?
63
- 'var lastType = typeof arguments[len - 1]\n'
64
- + 'if (lastType === "function") return $$__fn__$$.apply(self, arguments)\n'
65
- : ''
66
-
67
- return '(function ' + name + '() {\n'
68
- + 'var self = this\n'
69
- + 'var len = arguments.length\n'
70
- + multiArgs
71
- + withCallback
72
- + 'var args = new Array(len + 1)\n'
73
- + 'for (var i = 0; i < len; ++i) args[i] = arguments[i]\n'
74
- + 'var lastIndex = i\n'
75
- + 'return new Promise(function (resolve, reject) {\n'
76
- + 'args[lastIndex] = createCallback(resolve, reject, multiArgs)\n'
77
- + '$$__fn__$$.apply(self, args)\n'
78
- + '})\n'
79
- + '})'
58
+ var name = fn . name ;
59
+ name = ( name || '' ) . replace ( / \s | b o u n d (? ! $ ) / g, '' )
60
+ var newFn = function ( ) {
61
+ var self = this
62
+ var len = arguments . length
63
+ if ( options . withCallback ) {
64
+ var lastType = typeof arguments [ len - 1 ]
65
+ if ( lastType === 'function' ) return fn . apply ( self , arguments )
66
+ }
67
+ var args = new Array ( len + 1 )
68
+ for ( var i = 0 ; i < len ; ++ i ) args [ i ] = arguments [ i ]
69
+ var lastIndex = i
70
+ return new Promise ( function ( resolve , reject ) {
71
+ args [ lastIndex ] = createCallback ( resolve , reject , options . multiArgs )
72
+ fn . apply ( self , args )
73
+ } )
74
+ }
75
+ Object . defineProperty ( newFn , 'name' , { value : name } )
76
+ return newFn
80
77
}
0 commit comments