44*/
55var AbstractPlugin = require ( "../AbstractPlugin" ) ;
66var AMDRequireItemDependency = require ( "./AMDRequireItemDependency" ) ;
7+ var AMDRequireArrayDependency = require ( "./AMDRequireArrayDependency" ) ;
78var AMDRequireContextDependency = require ( "./AMDRequireContextDependency" ) ;
89var AMDRequireDependenciesBlock = require ( "./AMDRequireDependenciesBlock" ) ;
910var ContextDependencyHelpers = require ( "./ContextDependencyHelpers" ) ;
@@ -12,66 +13,31 @@ module.exports = AbstractPlugin.create({
1213 "call require" : function ( expr ) {
1314 switch ( expr . arguments . length ) {
1415 case 1 :
15- if ( expr . arguments [ 0 ] . type == "FunctionExpression" ) {
16- var dep = new AMDRequireDependenciesBlock ( expr , param . range , null , expr . arguments [ 0 ] . range ) ;
17- dep . loc = expr . loc ;
18- var old = this . state . current ;
19- this . state . current = dep ;
20- this . inScope ( [ ] , function ( ) {
21- param . items . forEach ( function ( param ) {
22- var result = this . applyPluginsBailResult ( "call require:amd:item" , expr , param ) ;
23- if ( result === undefined ) {
24- this . applyPluginsBailResult ( "call require:amd:context" , expr , param ) ;
25- }
26- } , this ) ;
27- } . bind ( this ) ) ;
28- this . inScope ( expr . arguments [ 0 ] . params . filter ( function ( i ) {
29- return [ "require" , "module" , "exports" ] . indexOf ( i . name ) < 0 ;
30- } ) , function ( ) {
31- if ( expr . arguments [ 0 ] . body . type === "BlockStatement" )
32- this . walkStatement ( expr . arguments [ 0 ] . body ) ;
33- else
34- this . walkExpression ( expr . arguments [ 0 ] . body ) ;
35- } . bind ( this ) ) ;
36- this . state . current = old ;
37- this . state . current . addBlock ( dep ) ;
38- return true ;
39- }
4016 var param = this . evaluateExpression ( expr . arguments [ 0 ] ) ;
41- if ( param . isArray ( ) ) {
42- var dep = new AMDRequireDependenciesBlock ( expr , param . range ) ;
43- dep . loc = expr . loc ;
44- var old = this . state . current ;
45- this . state . current = dep ;
46- this . inScope ( [ ] , function ( ) {
47- param . items . forEach ( function ( param ) {
48- var result = this . applyPluginsBailResult ( "call require:amd:item" , expr , param ) ;
49- if ( result === undefined ) {
50- this . applyPluginsBailResult ( "call require:amd:context" , expr , param ) ;
51- }
52- } , this ) ;
53- } . bind ( this ) ) ;
54- this . state . current = old ;
55- this . state . current . addBlock ( dep ) ;
56- return true ;
57- }
58- return ;
17+ var result ;
18+ var dep = new AMDRequireDependenciesBlock ( expr , param . range ) ;
19+ dep . loc = expr . loc ;
20+ var old = this . state . current ;
21+ this . state . current = dep ;
22+ this . inScope ( [ ] , function ( ) {
23+ result = this . applyPluginsBailResult ( "call require:amd:array" , expr , param ) ;
24+ } . bind ( this ) ) ;
25+ this . state . current = old ;
26+ if ( ! result ) return ;
27+ this . state . current . addBlock ( dep ) ;
28+ return true ;
5929 case 2 :
6030 var param = this . evaluateExpression ( expr . arguments [ 0 ] ) ;
61- if ( ! param . isArray ( ) ) return ;
6231 var dep = new AMDRequireDependenciesBlock ( expr , param . range , expr . arguments [ 1 ] . range ) ;
6332 dep . loc = expr . loc ;
6433 var old = this . state . current ;
6534 this . state . current = dep ;
6635 try {
36+ var result ;
6737 this . inScope ( [ ] , function ( ) {
68- param . items . forEach ( function ( param ) {
69- var result = this . applyPluginsBailResult ( "call require:amd:item" , expr , param ) ;
70- if ( result === undefined ) {
71- this . applyPluginsBailResult ( "call require:amd:context" , expr , param ) ;
72- }
73- } , this ) ;
38+ result = this . applyPluginsBailResult ( "call require:amd:array" , expr , param ) ;
7439 } . bind ( this ) ) ;
40+ if ( ! result ) return ;
7541 if ( expr . arguments [ 1 ] . type === "FunctionExpression" ) {
7642 this . inScope ( expr . arguments [ 1 ] . params . filter ( function ( i ) {
7743 return [ "require" , "module" , "exports" ] . indexOf ( i . name ) < 0 ;
@@ -89,6 +55,36 @@ module.exports = AbstractPlugin.create({
8955 return true ;
9056 }
9157 } ,
58+ "call require:amd:array" : function ( expr , param ) {
59+ if ( param . isArray ( ) ) {
60+ param . items . forEach ( function ( param ) {
61+ var result = this . applyPluginsBailResult ( "call require:amd:item" , expr , param ) ;
62+ if ( result === undefined ) {
63+ this . applyPluginsBailResult ( "call require:amd:context" , expr , param ) ;
64+ }
65+ } , this ) ;
66+ return true ;
67+ } else if ( param . isConstArray ( ) ) {
68+ var deps = [ ] ;
69+ param . array . forEach ( function ( request ) {
70+ var dep ;
71+ if ( [ "require" , "exports" , "module" ] . indexOf ( request ) >= 0 ) {
72+ dep = request ;
73+ } else {
74+ dep = new AMDRequireItemDependency ( request ) ;
75+ dep . loc = expr . loc ;
76+ dep . optional = ! ! this . scope . inTry ;
77+ this . state . current . addDependency ( dep ) ;
78+ }
79+ deps . push ( dep ) ;
80+ } , this ) ;
81+ var dep = new AMDRequireArrayDependency ( deps , param . range ) ;
82+ dep . loc = expr . loc ;
83+ dep . optional = ! ! this . scope . inTry ;
84+ this . state . current . addDependency ( dep ) ;
85+ return true ;
86+ }
87+ } ,
9288 "call require:amd:item" : function ( expr , param ) {
9389 if ( param . isConditional ( ) ) {
9490 param . options . forEach ( function ( param ) {
0 commit comments