@@ -46,6 +46,83 @@ class AMDDefineDependencyParserPlugin {
4646
4747 apply ( parser ) {
4848 const options = this . options ;
49+
50+ const processArray = ( expr , param , identifiers , namedModule ) => {
51+ if ( param . isArray ( ) ) {
52+ param . items . forEach ( ( param , idx ) => {
53+ if ( param . isString ( ) && [ "require" , "module" , "exports" ] . indexOf ( param . string ) >= 0 )
54+ identifiers [ idx ] = param . string ;
55+ const result = processItem ( expr , param , namedModule ) ;
56+ if ( result === undefined ) {
57+ processContext ( expr , param ) ;
58+ }
59+ } ) ;
60+ return true ;
61+ } else if ( param . isConstArray ( ) ) {
62+ const deps = [ ] ;
63+ param . array . forEach ( ( request , idx ) => {
64+ let dep ;
65+ let localModule ;
66+ if ( request === "require" ) {
67+ identifiers [ idx ] = request ;
68+ dep = "__webpack_require__" ;
69+ } else if ( [ "exports" , "module" ] . indexOf ( request ) >= 0 ) {
70+ identifiers [ idx ] = request ;
71+ dep = request ;
72+ } else if ( localModule = LocalModulesHelpers . getLocalModule ( parser . state , request ) ) { // eslint-disable-line no-cond-assign
73+ dep = new LocalModuleDependency ( localModule ) ;
74+ dep . loc = expr . loc ;
75+ parser . state . current . addDependency ( dep ) ;
76+ } else {
77+ dep = new AMDRequireItemDependency ( request ) ;
78+ dep . loc = expr . loc ;
79+ dep . optional = ! ! parser . scope . inTry ;
80+ parser . state . current . addDependency ( dep ) ;
81+ }
82+ deps . push ( dep ) ;
83+ } ) ;
84+ const dep = new AMDRequireArrayDependency ( deps , param . range ) ;
85+ dep . loc = expr . loc ;
86+ dep . optional = ! ! parser . scope . inTry ;
87+ parser . state . current . addDependency ( dep ) ;
88+ return true ;
89+ }
90+ } ;
91+ const processItem = ( expr , param , namedModule ) => {
92+ if ( param . isConditional ( ) ) {
93+ param . options . forEach ( ( param ) => {
94+ const result = processItem ( expr , param ) ;
95+ if ( result === undefined ) {
96+ processContext ( expr , param ) ;
97+ }
98+ } ) ;
99+ return true ;
100+ } else if ( param . isString ( ) ) {
101+ let dep , localModule ;
102+ if ( param . string === "require" ) {
103+ dep = new ConstDependency ( "__webpack_require__" , param . range ) ;
104+ } else if ( [ "require" , "exports" , "module" ] . indexOf ( param . string ) >= 0 ) {
105+ dep = new ConstDependency ( param . string , param . range ) ;
106+ } else if ( localModule = LocalModulesHelpers . getLocalModule ( parser . state , param . string , namedModule ) ) { // eslint-disable-line no-cond-assign
107+ dep = new LocalModuleDependency ( localModule , param . range ) ;
108+ } else {
109+ dep = new AMDRequireItemDependency ( param . string , param . range ) ;
110+ }
111+ dep . loc = expr . loc ;
112+ dep . optional = ! ! parser . scope . inTry ;
113+ parser . state . current . addDependency ( dep ) ;
114+ return true ;
115+ }
116+ } ;
117+ const processContext = ( expr , param ) => {
118+ const dep = ContextDependencyHelpers . create ( AMDRequireContextDependency , param . range , param , expr , options ) ;
119+ if ( ! dep ) return ;
120+ dep . loc = expr . loc ;
121+ dep . optional = ! ! parser . scope . inTry ;
122+ parser . state . current . addDependency ( dep ) ;
123+ return true ;
124+ } ;
125+
49126 parser . plugin ( "call define" , ( expr ) => {
50127 let array , fn , obj , namedModule ;
51128 switch ( expr . arguments . length ) {
@@ -126,7 +203,7 @@ class AMDDefineDependencyParserPlugin {
126203 if ( array ) {
127204 identifiers = { } ;
128205 const param = parser . evaluateExpression ( array ) ;
129- const result = parser . applyPluginsBailResult ( "call define:amd:array" , expr , param , identifiers , namedModule ) ;
206+ const result = processArray ( expr , param , identifiers , namedModule ) ;
130207 if ( ! result ) return ;
131208 if ( fnParams ) fnParams = fnParams . slice ( fnParamsOffset ) . filter ( ( param , idx ) => {
132209 if ( identifiers [ idx ] ) {
@@ -186,81 +263,6 @@ class AMDDefineDependencyParserPlugin {
186263 parser . state . current . addDependency ( dep ) ;
187264 return true ;
188265 } ) ;
189- parser . plugin ( "call define:amd:array" , ( expr , param , identifiers , namedModule ) => {
190- if ( param . isArray ( ) ) {
191- param . items . forEach ( ( param , idx ) => {
192- if ( param . isString ( ) && [ "require" , "module" , "exports" ] . indexOf ( param . string ) >= 0 )
193- identifiers [ idx ] = param . string ;
194- const result = parser . applyPluginsBailResult ( "call define:amd:item" , expr , param , namedModule ) ;
195- if ( result === undefined ) {
196- parser . applyPluginsBailResult ( "call define:amd:context" , expr , param ) ;
197- }
198- } ) ;
199- return true ;
200- } else if ( param . isConstArray ( ) ) {
201- const deps = [ ] ;
202- param . array . forEach ( ( request , idx ) => {
203- let dep ;
204- let localModule ;
205- if ( request === "require" ) {
206- identifiers [ idx ] = request ;
207- dep = "__webpack_require__" ;
208- } else if ( [ "exports" , "module" ] . indexOf ( request ) >= 0 ) {
209- identifiers [ idx ] = request ;
210- dep = request ;
211- } else if ( localModule = LocalModulesHelpers . getLocalModule ( parser . state , request ) ) { // eslint-disable-line no-cond-assign
212- dep = new LocalModuleDependency ( localModule ) ;
213- dep . loc = expr . loc ;
214- parser . state . current . addDependency ( dep ) ;
215- } else {
216- dep = new AMDRequireItemDependency ( request ) ;
217- dep . loc = expr . loc ;
218- dep . optional = ! ! parser . scope . inTry ;
219- parser . state . current . addDependency ( dep ) ;
220- }
221- deps . push ( dep ) ;
222- } ) ;
223- const dep = new AMDRequireArrayDependency ( deps , param . range ) ;
224- dep . loc = expr . loc ;
225- dep . optional = ! ! parser . scope . inTry ;
226- parser . state . current . addDependency ( dep ) ;
227- return true ;
228- }
229- } ) ;
230- parser . plugin ( "call define:amd:item" , ( expr , param , namedModule ) => {
231- if ( param . isConditional ( ) ) {
232- param . options . forEach ( ( param ) => {
233- const result = parser . applyPluginsBailResult ( "call define:amd:item" , expr , param ) ;
234- if ( result === undefined ) {
235- parser . applyPluginsBailResult ( "call define:amd:context" , expr , param ) ;
236- }
237- } ) ;
238- return true ;
239- } else if ( param . isString ( ) ) {
240- let dep , localModule ;
241- if ( param . string === "require" ) {
242- dep = new ConstDependency ( "__webpack_require__" , param . range ) ;
243- } else if ( [ "require" , "exports" , "module" ] . indexOf ( param . string ) >= 0 ) {
244- dep = new ConstDependency ( param . string , param . range ) ;
245- } else if ( localModule = LocalModulesHelpers . getLocalModule ( parser . state , param . string , namedModule ) ) { // eslint-disable-line no-cond-assign
246- dep = new LocalModuleDependency ( localModule , param . range ) ;
247- } else {
248- dep = new AMDRequireItemDependency ( param . string , param . range ) ;
249- }
250- dep . loc = expr . loc ;
251- dep . optional = ! ! parser . scope . inTry ;
252- parser . state . current . addDependency ( dep ) ;
253- return true ;
254- }
255- } ) ;
256- parser . plugin ( "call define:amd:context" , ( expr , param ) => {
257- const dep = ContextDependencyHelpers . create ( AMDRequireContextDependency , param . range , param , expr , options ) ;
258- if ( ! dep ) return ;
259- dep . loc = expr . loc ;
260- dep . optional = ! ! parser . scope . inTry ;
261- parser . state . current . addDependency ( dep ) ;
262- return true ;
263- } ) ;
264266 }
265267}
266268module . exports = AMDDefineDependencyParserPlugin ;
0 commit comments