@@ -49,7 +49,7 @@ exports.find = function (src, opts) {
4949 function visit ( node , st , c ) {
5050 var hasRequire = wordRe . test ( src . slice ( node . start , node . end ) ) ;
5151 if ( ! hasRequire ) return ;
52- if ( redefinesRequire ( node ) ) return ;
52+ if ( isBundledDefinition ( node ) ) return ;
5353 walk . base [ node . type ] ( node , st , c ) ;
5454 if ( node . type !== 'CallExpression' ) return ;
5555 if ( isRequire ( node ) ) {
@@ -78,15 +78,17 @@ exports.find = function (src, opts) {
7878 } ) ;
7979
8080 // Detect `require` redefinitions in function parameter lists, like
81- // in `[function(require,module,exports){` generated by browser-pack.
81+ // in `{0: [function(require,module,exports){` generated by browser-pack.
8282 // This is a simple way to address the 99% case without doing full scope analysis
83- function redefinesRequire ( node ) {
84- if ( node . type === 'FunctionExpression' ) {
85- return node . params . some ( function ( param ) {
86- return param . type === 'Identifier' && param . name === word ;
87- } ) ;
88- }
89- return false ;
83+ function isBundledDefinition ( node ) {
84+ if ( node . type !== 'ObjectExpression' ) return false ;
85+ if ( node . properties . length < 1 ) return false ;
86+ var arr = node . properties [ 0 ] . value ;
87+ if ( arr . type !== 'ArrayExpression' ) return false ;
88+ if ( arr . elements . length < 2 ) return false ;
89+ if ( arr . elements [ 0 ] . type !== 'FunctionExpression' ) return false ;
90+ var fn = arr . elements [ 0 ] ;
91+ return fn . params . length > 0 && fn . params [ 0 ] . type === 'Identifier' && fn . params [ 0 ] . name === word ;
9092 }
9193
9294 return modules ;
0 commit comments