@@ -9,6 +9,7 @@ var OriginalSource = require("webpack-core/lib/OriginalSource");
99var RawSource = require ( "webpack-core/lib/RawSource" ) ;
1010var ReplaceSource = require ( "webpack-core/lib/ReplaceSource" ) ;
1111var ModuleParseError = require ( "./ModuleParseError" ) ;
12+ var TemplateArgumentDependency = require ( "./dependencies/TemplateArgumentDependency" ) ;
1213var path = require ( "path" ) ;
1314
1415function NormalModule ( request , userRequest , rawRequest , loaders , resource , parser ) {
@@ -82,7 +83,7 @@ NormalModule.prototype.source = function(dependencyTemplates, outputOptions, req
8283 function doDep ( dep ) {
8384 var template = dependencyTemplates . get ( dep . Class ) ;
8485 if ( ! template ) throw new Error ( "No template for dependency: " + dep . Class . name ) ;
85- template . apply ( dep , source , outputOptions , requestShortener ) ;
86+ template . apply ( dep , source , outputOptions , requestShortener , dependencyTemplates ) ;
8687 }
8788 function doVariable ( vars , variable ) {
8889 var name = variable . name ;
@@ -151,3 +152,82 @@ NormalModule.prototype.updateHash = function(hash) {
151152 hash . update ( "null" ) ;
152153 Module . prototype . updateHash . call ( this , hash ) ;
153154} ;
155+
156+ NormalModule . prototype . getSourceHash = function ( ) {
157+ if ( ! this . _source ) return "" ;
158+ var hash = new ( require ( "crypto" ) . Hash ) ( "md5" ) ;
159+ hash . update ( this . _source . source ( ) ) ;
160+ return hash . digest ( "hex" ) ;
161+ } ;
162+
163+ NormalModule . prototype . getAllModuleDependencies = function ( ) {
164+ var list = [ ] ;
165+ function doDep ( dep ) {
166+ if ( dep . module && list . indexOf ( dep . module ) < 0 )
167+ list . push ( dep . module ) ;
168+ }
169+ function doVariable ( variable ) {
170+ variable . dependencies . forEach ( doDep ) ;
171+ }
172+ function doBlock ( block ) {
173+ block . variables . forEach ( doVariable ) ;
174+ block . dependencies . forEach ( doDep ) ;
175+ block . blocks . forEach ( doBlock ) ;
176+ }
177+ doBlock ( this ) ;
178+ return list ;
179+ } ;
180+
181+ NormalModule . prototype . createTemplate = function ( keepModules ) {
182+ var template = new NormalModule ( "" , "" , "" , [ ] , "" , null ) ;
183+ template . _source = this . _source ;
184+ template . built = this . built ;
185+ template . templateModules = keepModules ;
186+ var args = template . arguments = [ ] ;
187+ function doDeps ( deps ) {
188+ return deps . map ( function ( dep ) {
189+ if ( keepModules . indexOf ( dep . module ) < 0 ) {
190+ var argName = "__webpack_module_template_argument_" + args . length + "__" ;
191+ args . push ( argName ) ;
192+ return new TemplateArgumentDependency ( argName , dep ) ;
193+ } else {
194+ return dep ;
195+ }
196+ } ) ;
197+ }
198+ function doVariable ( variable , newVariable ) {
199+ variable . dependencies . forEach ( doDep ) ;
200+ }
201+ function doBlock ( block , newBlock ) {
202+ block . variables . forEach ( function ( variable ) {
203+ var newDependencies = doDeps ( variable . dependencies ) ;
204+ newBlock . addVariable ( variable . name , variable . expression , newDependencies ) ;
205+ } ) ;
206+ newBlock . dependencies = doDeps ( block . dependencies ) ;
207+ block . blocks . forEach ( function ( childBlock ) {
208+ var newChildBlock = new AsyncDependenciesBlock ( childBlock . name ) ;
209+ newBlock . addBlock ( newChildBlock ) ;
210+ doBlock ( childBlock , newChildBlock ) ;
211+ } ) ;
212+ }
213+ doBlock ( this , template ) ;
214+ return template ;
215+ } ;
216+
217+ NormalModule . prototype . getTemplateArguments = function ( keepModules ) {
218+ var list = [ ] ;
219+ function doDep ( dep ) {
220+ if ( dep . module && keepModules . indexOf ( dep . module ) < 0 )
221+ list . push ( dep . module ) ;
222+ }
223+ function doVariable ( variable ) {
224+ variable . dependencies . forEach ( doDep ) ;
225+ }
226+ function doBlock ( block ) {
227+ block . variables . forEach ( doVariable ) ;
228+ block . dependencies . forEach ( doDep ) ;
229+ block . blocks . forEach ( doBlock ) ;
230+ }
231+ doBlock ( this ) ;
232+ return list ;
233+ } ;
0 commit comments