mirror of https://github.com/webpack/webpack.git
				
				
				
			remove originModule from Dependencies and add parent module to ModuleGraph
This commit is contained in:
		
							parent
							
								
									bff959901d
								
							
						
					
					
						commit
						3618cc1b3c
					
				|  | @ -626,7 +626,10 @@ class Compilation { | |||
| 	processModuleDependencies(module, callback) { | ||||
| 		const dependencies = new Map(); | ||||
| 
 | ||||
| 		const addDependency = dep => { | ||||
| 		let currentBlock = module; | ||||
| 
 | ||||
| 		const processDependency = dep => { | ||||
| 			this.moduleGraph.setParents(dep, currentBlock, module); | ||||
| 			const resourceIdent = dep.getResourceIdentifier(); | ||||
| 			if (resourceIdent) { | ||||
| 				const factory = this.dependencyFactories.get(dep.constructor); | ||||
|  | @ -647,17 +650,18 @@ class Compilation { | |||
| 			} | ||||
| 		}; | ||||
| 
 | ||||
| 		const addDependenciesBlock = block => { | ||||
| 		const processDependenciesBlock = block => { | ||||
| 			if (block.dependencies) { | ||||
| 				iterationOfArrayCallback(block.dependencies, addDependency); | ||||
| 				currentBlock = block; | ||||
| 				iterationOfArrayCallback(block.dependencies, processDependency); | ||||
| 			} | ||||
| 			if (block.blocks) { | ||||
| 				iterationOfArrayCallback(block.blocks, addDependenciesBlock); | ||||
| 				iterationOfArrayCallback(block.blocks, processDependenciesBlock); | ||||
| 			} | ||||
| 		}; | ||||
| 
 | ||||
| 		try { | ||||
| 			addDependenciesBlock(module); | ||||
| 			processDependenciesBlock(module); | ||||
| 		} catch (e) { | ||||
| 			callback(e); | ||||
| 		} | ||||
|  |  | |||
|  | @ -90,7 +90,7 @@ class DelegatedModule extends Module { | |||
| 		); | ||||
| 		this.addDependency(this.delegatedSourceDependency); | ||||
| 		this.addDependency( | ||||
| 			new DelegatedExportsDependency(this, this.delegateData.exports || true) | ||||
| 			new DelegatedExportsDependency(this.delegateData.exports || true) | ||||
| 		); | ||||
| 		callback(); | ||||
| 	} | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| const ModuleGraphConnection = require("./ModuleGraphConnection"); | ||||
| 
 | ||||
| /** @typedef {import("./DependenciesBlock")} DependenciesBlock */ | ||||
| /** @typedef {import("./Dependency")} Dependency */ | ||||
| /** @typedef {import("./Module")} Module */ | ||||
| 
 | ||||
|  | @ -20,6 +21,8 @@ class ModuleGraph { | |||
| 		this._originMap = new Map(); | ||||
| 		/** @type {Map<any, Object>} */ | ||||
| 		this._metaMap = new Map(); | ||||
| 		/** @type {Map<Dependency, {module: Module, block: DependenciesBlock}>} */ | ||||
| 		this._parentsMap = new Map(); | ||||
| 	} | ||||
| 
 | ||||
| 	_getModuleSet(module) { | ||||
|  | @ -40,6 +43,34 @@ class ModuleGraph { | |||
| 		return connections; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Dependency} dependency the dependency | ||||
| 	 * @param {DependenciesBlock} block parent block | ||||
| 	 * @param {Module} module parent module | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	setParents(dependency, block, module) { | ||||
| 		this._parentsMap.set(dependency, { module, block }); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Dependency} dependency the dependency | ||||
| 	 * @returns {Module} parent module | ||||
| 	 */ | ||||
| 	getParentModule(dependency) { | ||||
| 		const entry = this._parentsMap.get(dependency); | ||||
| 		return entry !== undefined ? entry.module : null; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Dependency} dependency the dependency | ||||
| 	 * @returns {DependenciesBlock} parent block | ||||
| 	 */ | ||||
| 	getParentBlock(dependency) { | ||||
| 		const entry = this._parentsMap.get(dependency); | ||||
| 		return entry !== undefined ? entry.block : null; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Module} originModule the referencing module | ||||
| 	 * @param {Dependency} dependency the referencing dependency | ||||
|  | @ -158,6 +189,15 @@ class ModuleGraph { | |||
| 		return connection !== undefined ? connection.originModule : null; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Dependency} dependency the dependency to look for a referencing module | ||||
| 	 * @returns {Module} the original referencing module | ||||
| 	 */ | ||||
| 	getResolvedOrigin(dependency) { | ||||
| 		const connection = this._dependencyMap.get(dependency); | ||||
| 		return connection !== undefined ? connection.resolvedOriginModule : null; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Module} module the module | ||||
| 	 * @returns {ModuleGraphConnection[]} reasons why a module is included | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ class ModuleGraphConnection { | |||
| 	 */ | ||||
| 	constructor(originModule, dependency, module, explanation) { | ||||
| 		this.originModule = originModule; | ||||
| 		this.resolvedOriginModule = originModule; | ||||
| 		this.dependency = dependency; | ||||
| 		this.resolvedModule = module; | ||||
| 		this.module = module; | ||||
|  |  | |||
|  | @ -170,8 +170,7 @@ class NodeStuffPlugin { | |||
| 							getModulePath( | ||||
| 								parser.state.module.context, | ||||
| 								isHarmony ? harmonyModuleBuildin : moduleBuildin | ||||
| 							), | ||||
| 							parser.state.module | ||||
| 							) | ||||
| 						); | ||||
| 						dep.loc = expr.loc; | ||||
| 						parser.state.module.addDependency(dep); | ||||
|  |  | |||
|  | @ -12,9 +12,8 @@ const NullDependency = require("./NullDependency"); | |||
| /** @typedef {import("../ModuleGraph")} ModuleGraph */ | ||||
| 
 | ||||
| class DelegatedExportsDependency extends NullDependency { | ||||
| 	constructor(originModule, exports) { | ||||
| 	constructor(exports) { | ||||
| 		super(); | ||||
| 		this.originModule = originModule; | ||||
| 		this.exports = exports; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -28,8 +27,11 @@ class DelegatedExportsDependency extends NullDependency { | |||
| 	 * @returns {DependencyReference} reference | ||||
| 	 */ | ||||
| 	getReference(moduleGraph) { | ||||
| 		if (!this.originModule) return null; | ||||
| 		return new DependencyReference(() => this.originModule, true, false); | ||||
| 		return new DependencyReference( | ||||
| 			() => moduleGraph.getParentModule(this), | ||||
| 			true, | ||||
| 			false | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -12,8 +12,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency"); | |||
| /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */ | ||||
| 
 | ||||
| class HarmonyAcceptImportDependency extends HarmonyImportDependency { | ||||
| 	constructor(request, originModule, parserScope) { | ||||
| 		super(request, originModule, NaN, parserScope); | ||||
| 	constructor(request, parserScope) { | ||||
| 		super(request, NaN, parserScope); | ||||
| 		this.weak = true; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,14 +14,6 @@ const NullDependency = require("./NullDependency"); | |||
| /** @typedef {import("../Module")} Module */ | ||||
| 
 | ||||
| class HarmonyCompatibilityDependency extends NullDependency { | ||||
| 	/** | ||||
| 	 * @param {Module} originModule the originating module | ||||
| 	 */ | ||||
| 	constructor(originModule) { | ||||
| 		super(); | ||||
| 		this.originModule = originModule; | ||||
| 	} | ||||
| 
 | ||||
| 	get type() { | ||||
| 		return "harmony export header"; | ||||
| 	} | ||||
|  | @ -43,12 +35,11 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate | |||
| 	 * @param {DependencyTemplateContext} templateContext the template context | ||||
| 	 * @returns {InitFragment[]|null} the init fragments | ||||
| 	 */ | ||||
| 	getInitFragments(dependency, { runtimeTemplate, moduleGraph }) { | ||||
| 		const dep = /** @type {HarmonyCompatibilityDependency} */ (dependency); | ||||
| 		const usedExports = dep.originModule.getUsedExports(moduleGraph); | ||||
| 	getInitFragments(dependency, { module, runtimeTemplate, moduleGraph }) { | ||||
| 		const usedExports = module.getUsedExports(moduleGraph); | ||||
| 		if (usedExports === true || usedExports === null) { | ||||
| 			const content = runtimeTemplate.defineEsModuleFlagStatement({ | ||||
| 				exportsArgument: dep.originModule.exportsArgument | ||||
| 				exportsArgument: module.exportsArgument | ||||
| 			}); | ||||
| 			return [ | ||||
| 				new InitFragment( | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ module.exports = class HarmonyDetectionParserPlugin { | |||
| 				}); | ||||
| 			if (isHarmony) { | ||||
| 				const module = parser.state.module; | ||||
| 				const compatDep = new HarmonyCompatibilityDependency(module); | ||||
| 				const compatDep = new HarmonyCompatibilityDependency(); | ||||
| 				compatDep.loc = { | ||||
| 					start: { | ||||
| 						line: -1, | ||||
|  |  | |||
|  | @ -42,7 +42,6 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 				parser.state.current.addDependency(clearDep); | ||||
| 				const sideEffectDep = new HarmonyImportSideEffectDependency( | ||||
| 					source, | ||||
| 					parser.state.module, | ||||
| 					parser.state.lastHarmonyImportOrder, | ||||
| 					parser.state.harmonyParserScope | ||||
| 				); | ||||
|  | @ -56,7 +55,6 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 			"HarmonyExportDependencyParserPlugin", | ||||
| 			(statement, expr) => { | ||||
| 				const dep = new HarmonyExportExpressionDependency( | ||||
| 					parser.state.module, | ||||
| 					expr.range, | ||||
| 					statement.range | ||||
| 				); | ||||
|  | @ -82,7 +80,6 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 					const settings = parser.state.harmonySpecifier.get(id); | ||||
| 					dep = new HarmonyExportImportedSpecifierDependency( | ||||
| 						settings.source, | ||||
| 						parser.state.module, | ||||
| 						settings.sourceOrder, | ||||
| 						parser.state.harmonyParserScope, | ||||
| 						settings.id, | ||||
|  | @ -92,11 +89,7 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 						this.strictExportPresence | ||||
| 					); | ||||
| 				} else { | ||||
| 					dep = new HarmonyExportSpecifierDependency( | ||||
| 						parser.state.module, | ||||
| 						id, | ||||
| 						name | ||||
| 					); | ||||
| 					dep = new HarmonyExportSpecifierDependency(id, name); | ||||
| 				} | ||||
| 				dep.loc = Object.create(statement.loc); | ||||
| 				dep.loc.index = idx; | ||||
|  | @ -118,7 +111,6 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 				} | ||||
| 				const dep = new HarmonyExportImportedSpecifierDependency( | ||||
| 					source, | ||||
| 					parser.state.module, | ||||
| 					parser.state.lastHarmonyImportOrder, | ||||
| 					parser.state.harmonyParserScope, | ||||
| 					id, | ||||
|  |  | |||
|  | @ -14,9 +14,8 @@ const NullDependency = require("./NullDependency"); | |||
| /** @typedef {import("../ModuleGraph")} ModuleGraph */ | ||||
| 
 | ||||
| class HarmonyExportExpressionDependency extends NullDependency { | ||||
| 	constructor(originModule, range, rangeStatement) { | ||||
| 	constructor(range, rangeStatement) { | ||||
| 		super(); | ||||
| 		this.originModule = originModule; | ||||
| 		this.range = range; | ||||
| 		this.rangeStatement = rangeStatement; | ||||
| 	} | ||||
|  | @ -45,10 +44,10 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla | |||
| 	 * @param {DependencyTemplateContext} templateContext the context object | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, { moduleGraph }) { | ||||
| 	apply(dependency, source, { module, moduleGraph }) { | ||||
| 		const dep = /** @type {HarmonyExportExpressionDependency} */ (dependency); | ||||
| 		const used = dep.originModule.getUsedName(moduleGraph, "default"); | ||||
| 		const content = this.getContent(dep.originModule, used); | ||||
| 		const used = module.getUsedName(moduleGraph, "default"); | ||||
| 		const content = this.getContent(module, used); | ||||
| 
 | ||||
| 		if (dep.range) { | ||||
| 			source.replace(dep.rangeStatement[0], dep.range[0] - 1, content + "("); | ||||
|  |  | |||
|  | @ -66,7 +66,6 @@ const EMPTY_STAR_MODE = new ExportMode("empty-star"); | |||
| class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | ||||
| 	constructor( | ||||
| 		request, | ||||
| 		originModule, | ||||
| 		sourceOrder, | ||||
| 		parserScope, | ||||
| 		id, | ||||
|  | @ -75,7 +74,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 		otherStarExports, | ||||
| 		strictExportPresence | ||||
| 	) { | ||||
| 		super(request, originModule, sourceOrder, parserScope); | ||||
| 		super(request, sourceOrder, parserScope); | ||||
| 		this.id = id; | ||||
| 		this.name = name; | ||||
| 		this.activeExports = activeExports; | ||||
|  | @ -95,8 +94,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 	getMode(moduleGraph, ignoreUnused) { | ||||
| 		const name = this.name; | ||||
| 		const id = this.id; | ||||
| 		const used = this.originModule.getUsedName(moduleGraph, name); | ||||
| 		const usedExports = this.originModule.getUsedExports(moduleGraph); | ||||
| 		const parentModule = moduleGraph.getParentModule(this); | ||||
| 		const used = parentModule.getUsedName(moduleGraph, name); | ||||
| 		const usedExports = parentModule.getUsedExports(moduleGraph); | ||||
| 		const importedModule = moduleGraph.getModule(this); | ||||
| 
 | ||||
| 		if (!importedModule) { | ||||
|  | @ -111,7 +111,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 			return mode; | ||||
| 		} | ||||
| 
 | ||||
| 		const strictHarmonyModule = this.originModule.buildMeta.strictHarmonyModule; | ||||
| 		const strictHarmonyModule = parentModule.buildMeta.strictHarmonyModule; | ||||
| 		if (name && id === "default" && importedModule.buildMeta) { | ||||
| 			if (!importedModule.buildMeta.exportsType) { | ||||
| 				const mode = new ExportMode( | ||||
|  | @ -379,7 +379,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 	getWarnings(moduleGraph) { | ||||
| 		if ( | ||||
| 			this.strictExportPresence || | ||||
| 			this.originModule.buildMeta.strictHarmonyModule | ||||
| 			moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule | ||||
| 		) { | ||||
| 			return []; | ||||
| 		} | ||||
|  | @ -394,7 +394,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 	getErrors(moduleGraph) { | ||||
| 		if ( | ||||
| 			this.strictExportPresence || | ||||
| 			this.originModule.buildMeta.strictHarmonyModule | ||||
| 			moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule | ||||
| 		) { | ||||
| 			return this._getErrors(moduleGraph); | ||||
| 		} | ||||
|  | @ -410,7 +410,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { | |||
| 		if (!importedModule.buildMeta || !importedModule.buildMeta.exportsType) { | ||||
| 			// It's not an harmony module
 | ||||
| 			if ( | ||||
| 				this.originModule.buildMeta.strictHarmonyModule && | ||||
| 				moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule && | ||||
| 				this.id !== "default" | ||||
| 			) { | ||||
| 				// In strict harmony modules we only support the default export
 | ||||
|  | @ -470,7 +470,11 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS | |||
| 		if (this.isUsed(dep, templateContext)) { | ||||
| 			const importFragments = super.getInitFragments(dep, templateContext); | ||||
| 			const exportFragment = new InitFragment( | ||||
| 				this.getContent(dep, templateContext.moduleGraph), | ||||
| 				this.getContent( | ||||
| 					dep, | ||||
| 					templateContext.module, | ||||
| 					templateContext.moduleGraph | ||||
| 				), | ||||
| 				InitFragment.STAGE_HARMONY_IMPORTS, | ||||
| 				dep.sourceOrder | ||||
| 			); | ||||
|  | @ -487,16 +491,15 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS | |||
| 	 * @param {DependencyTemplateContext} templateContext the template context | ||||
| 	 * @returns {Boolean} true, if (any) export is used | ||||
| 	 */ | ||||
| 	isUsed(dep, templateContext) { | ||||
| 		const moduleGraph = templateContext.moduleGraph; | ||||
| 	isUsed(dep, { moduleGraph, module }) { | ||||
| 		if (dep.name) { | ||||
| 			return dep.originModule.isExportUsed(moduleGraph, dep.name); | ||||
| 			return module.isExportUsed(moduleGraph, dep.name); | ||||
| 		} else { | ||||
| 			const importedModule = templateContext.moduleGraph.getModule(dep); | ||||
| 			const importedModule = moduleGraph.getModule(dep); | ||||
| 			const activeFromOtherStarExports = dep._discoverActiveExportsFromOtherStartExports( | ||||
| 				templateContext.moduleGraph | ||||
| 				moduleGraph | ||||
| 			); | ||||
| 			const usedExports = dep.originModule.getUsedExports(moduleGraph); | ||||
| 			const usedExports = module.getUsedExports(moduleGraph); | ||||
| 
 | ||||
| 			if (usedExports && usedExports !== true) { | ||||
| 				// we know which exports are used
 | ||||
|  | @ -528,12 +531,12 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS | |||
| 
 | ||||
| 	/** | ||||
| 	 * @param {HarmonyExportImportedSpecifierDependency} dep dependency | ||||
| 	 * @param {Module} module the current module | ||||
| 	 * @param {ModuleGraph} moduleGraph the module graph | ||||
| 	 * @returns {string} the generated code | ||||
| 	 */ | ||||
| 	getContent(dep, moduleGraph) { | ||||
| 	getContent(dep, module, moduleGraph) { | ||||
| 		const mode = dep.getMode(moduleGraph, false); | ||||
| 		const module = dep.originModule; | ||||
| 		const importedModule = moduleGraph.getModule(dep); | ||||
| 		const importVar = dep.getImportVar(moduleGraph); | ||||
| 
 | ||||
|  | @ -667,7 +670,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS | |||
| 				} else { | ||||
| 					content += "if(__WEBPACK_IMPORT_KEY__ !== 'default') "; | ||||
| 				} | ||||
| 				const exportsName = dep.originModule.exportsArgument; | ||||
| 				const exportsName = module.exportsArgument; | ||||
| 				return ( | ||||
| 					content + | ||||
| 					`(function(key) { __webpack_require__.d(${exportsName}, key, function() { return ${importVar}[key]; }) }(__WEBPACK_IMPORT_KEY__));\n` | ||||
|  |  | |||
|  | @ -15,9 +15,8 @@ const NullDependency = require("./NullDependency"); | |||
| /** @typedef {import("../ModuleGraph")} ModuleGraph */ | ||||
| 
 | ||||
| class HarmonyExportSpecifierDependency extends NullDependency { | ||||
| 	constructor(originModule, id, name) { | ||||
| 	constructor(id, name) { | ||||
| 		super(); | ||||
| 		this.originModule = originModule; | ||||
| 		this.id = id; | ||||
| 		this.name = name; | ||||
| 	} | ||||
|  | @ -55,23 +54,23 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen | |||
| 	 * @param {DependencyTemplateContext} templateContext the template context | ||||
| 	 * @returns {InitFragment[]|null} the init fragments | ||||
| 	 */ | ||||
| 	getInitFragments(dependency, { moduleGraph }) { | ||||
| 	getInitFragments(dependency, { module, moduleGraph }) { | ||||
| 		return [ | ||||
| 			new InitFragment( | ||||
| 				this.getContent(moduleGraph, dependency), | ||||
| 				this.getContent(dependency, module, moduleGraph), | ||||
| 				InitFragment.STAGE_HARMONY_EXPORTS, | ||||
| 				1 | ||||
| 			) | ||||
| 		]; | ||||
| 	} | ||||
| 
 | ||||
| 	getContent(moduleGraph, dep) { | ||||
| 		const used = dep.originModule.getUsedName(moduleGraph, dep.name); | ||||
| 	getContent(dep, module, moduleGraph) { | ||||
| 		const used = module.getUsedName(moduleGraph, dep.name); | ||||
| 		if (!used) { | ||||
| 			return `/* unused harmony export ${dep.name || "namespace"} */\n`; | ||||
| 		} | ||||
| 
 | ||||
| 		const exportsName = dep.originModule.exportsArgument; | ||||
| 		const exportsName = module.exportsArgument; | ||||
| 
 | ||||
| 		return `/* harmony export (binding) */ __webpack_require__.d(${exportsName}, ${JSON.stringify( | ||||
| 			used | ||||
|  |  | |||
|  | @ -23,13 +23,11 @@ class HarmonyImportDependency extends ModuleDependency { | |||
| 	/** | ||||
| 	 * | ||||
| 	 * @param {string} request request string | ||||
| 	 * @param {Module} originModule module which contains the dependency | ||||
| 	 * @param {number} sourceOrder source order | ||||
| 	 * @param {TODO} parserScope parser scope | ||||
| 	 */ | ||||
| 	constructor(request, originModule, sourceOrder, parserScope) { | ||||
| 	constructor(request, sourceOrder, parserScope) { | ||||
| 		super(request); | ||||
| 		this.originModule = originModule; | ||||
| 		this.sourceOrder = sourceOrder; | ||||
| 		this.parserScope = parserScope; | ||||
| 	} | ||||
|  | @ -70,13 +68,13 @@ class HarmonyImportDependency extends ModuleDependency { | |||
| 	 * @param {DependencyTemplateContext} templateContext the template context | ||||
| 	 * @returns {string} name of the variable for the import | ||||
| 	 */ | ||||
| 	getImportStatement(update, { runtimeTemplate: runtime, moduleGraph }) { | ||||
| 		return runtime.importStatement({ | ||||
| 	getImportStatement(update, { runtimeTemplate, module, moduleGraph }) { | ||||
| 		return runtimeTemplate.importStatement({ | ||||
| 			update, | ||||
| 			module: moduleGraph.getModule(this), | ||||
| 			importVar: this.getImportVar(moduleGraph), | ||||
| 			request: this.request, | ||||
| 			originModule: this.originModule | ||||
| 			originModule: module | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				parser.state.module.addDependency(clearDep); | ||||
| 				const sideEffectDep = new HarmonyImportSideEffectDependency( | ||||
| 					source, | ||||
| 					parser.state.module, | ||||
| 					parser.state.lastHarmonyImportOrder, | ||||
| 					parser.state.harmonyParserScope | ||||
| 				); | ||||
|  | @ -61,7 +60,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				const settings = parser.state.harmonySpecifier.get(name); | ||||
| 				const dep = new HarmonyImportSpecifierDependency( | ||||
| 					settings.source, | ||||
| 					parser.state.module, | ||||
| 					settings.sourceOrder, | ||||
| 					parser.state.harmonyParserScope, | ||||
| 					settings.id, | ||||
|  | @ -83,7 +81,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				if (settings.id !== null) return false; | ||||
| 				const dep = new HarmonyImportSpecifierDependency( | ||||
| 					settings.source, | ||||
| 					parser.state.module, | ||||
| 					settings.sourceOrder, | ||||
| 					parser.state.harmonyParserScope, | ||||
| 					expr.property.name || expr.property.value, | ||||
|  | @ -109,7 +106,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 					if (settings.id !== null) return false; | ||||
| 					const dep = new HarmonyImportSpecifierDependency( | ||||
| 						settings.source, | ||||
| 						parser.state.module, | ||||
| 						settings.sourceOrder, | ||||
| 						parser.state.harmonyParserScope, | ||||
| 						expr.callee.property.name || expr.callee.property.value, | ||||
|  | @ -137,7 +133,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				const settings = parser.state.harmonySpecifier.get(name); | ||||
| 				const dep = new HarmonyImportSpecifierDependency( | ||||
| 					settings.source, | ||||
| 					parser.state.module, | ||||
| 					settings.sourceOrder, | ||||
| 					parser.state.harmonyParserScope, | ||||
| 					settings.id, | ||||
|  | @ -168,7 +163,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				const dependencies = requests.map(request => { | ||||
| 					const dep = new HarmonyAcceptImportDependency( | ||||
| 						request, | ||||
| 						parser.state.module, | ||||
| 						harmonyParserScope | ||||
| 					); | ||||
| 					dep.loc = expr.loc; | ||||
|  | @ -197,7 +191,6 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				const dependencies = requests.map(request => { | ||||
| 					const dep = new HarmonyAcceptImportDependency( | ||||
| 						request, | ||||
| 						parser.state.module, | ||||
| 						harmonyParserScope | ||||
| 					); | ||||
| 					dep.loc = expr.loc; | ||||
|  |  | |||
|  | @ -15,8 +15,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency"); | |||
| /** @typedef {import("./DependencyReference")} DependencyReference */ | ||||
| 
 | ||||
| class HarmonyImportSideEffectDependency extends HarmonyImportDependency { | ||||
| 	constructor(request, originModule, sourceOrder, parserScope) { | ||||
| 		super(request, originModule, sourceOrder, parserScope); | ||||
| 	constructor(request, sourceOrder, parserScope) { | ||||
| 		super(request, sourceOrder, parserScope); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -20,7 +20,6 @@ const HarmonyImportDependency = require("./HarmonyImportDependency"); | |||
| class HarmonyImportSpecifierDependency extends HarmonyImportDependency { | ||||
| 	constructor( | ||||
| 		request, | ||||
| 		originModule, | ||||
| 		sourceOrder, | ||||
| 		parserScope, | ||||
| 		id, | ||||
|  | @ -28,7 +27,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency { | |||
| 		range, | ||||
| 		strictExportPresence | ||||
| 	) { | ||||
| 		super(request, originModule, sourceOrder, parserScope); | ||||
| 		super(request, sourceOrder, parserScope); | ||||
| 		this.id = id === null ? null : `${id}`; | ||||
| 		this.name = name; | ||||
| 		this.range = range; | ||||
|  | @ -78,7 +77,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency { | |||
| 	getWarnings(moduleGraph) { | ||||
| 		if ( | ||||
| 			this.strictExportPresence || | ||||
| 			this.originModule.buildMeta.strictHarmonyModule | ||||
| 			moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule | ||||
| 		) { | ||||
| 			return []; | ||||
| 		} | ||||
|  | @ -93,7 +92,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency { | |||
| 	getErrors(moduleGraph) { | ||||
| 		if ( | ||||
| 			this.strictExportPresence || | ||||
| 			this.originModule.buildMeta.strictHarmonyModule | ||||
| 			moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule | ||||
| 		) { | ||||
| 			return this._getErrors(moduleGraph); | ||||
| 		} | ||||
|  | @ -109,7 +108,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency { | |||
| 		if (!importedModule.buildMeta || !importedModule.buildMeta.exportsType) { | ||||
| 			// It's not an harmony module
 | ||||
| 			if ( | ||||
| 				this.originModule.buildMeta.strictHarmonyModule && | ||||
| 				moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule && | ||||
| 				this.getId(moduleGraph) !== "default" | ||||
| 			) { | ||||
| 				// In strict harmony modules we only support the default export
 | ||||
|  | @ -195,13 +194,13 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen | |||
| 		source.replace(dep.range[0], dep.range[1] - 1, content); | ||||
| 	} | ||||
| 
 | ||||
| 	getContent(dep, { runtimeTemplate: runtime, moduleGraph }) { | ||||
| 		const exportExpr = runtime.exportFromImport({ | ||||
| 	getContent(dep, { runtimeTemplate, module, moduleGraph }) { | ||||
| 		const exportExpr = runtimeTemplate.exportFromImport({ | ||||
| 			moduleGraph, | ||||
| 			module: moduleGraph.getModule(dep), | ||||
| 			request: dep.request, | ||||
| 			exportName: dep.getId(moduleGraph), | ||||
| 			originModule: dep.originModule, | ||||
| 			originModule: module, | ||||
| 			asiSafe: dep.shorthand, | ||||
| 			isCall: dep.call, | ||||
| 			callContext: !dep.directImport, | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ module.exports = class ImportDependenciesBlock extends AsyncDependenciesBlock { | |||
| 	constructor(request, range, groupOptions, module, loc, originModule) { | ||||
| 		super(groupOptions, module, loc, request); | ||||
| 		this.range = range; | ||||
| 		const dep = new ImportDependency(request, originModule, this); | ||||
| 		const dep = new ImportDependency(request, this); | ||||
| 		dep.loc = loc; | ||||
| 		this.addDependency(dep); | ||||
| 	} | ||||
|  |  | |||
|  | @ -12,9 +12,8 @@ const ModuleDependency = require("./ModuleDependency"); | |||
| /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */ | ||||
| 
 | ||||
| class ImportDependency extends ModuleDependency { | ||||
| 	constructor(request, originModule, block) { | ||||
| 	constructor(request, block) { | ||||
| 		super(request); | ||||
| 		this.originModule = originModule; | ||||
| 		this.block = block; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -30,13 +29,13 @@ ImportDependency.Template = class ImportDependencyTemplate extends ModuleDepende | |||
| 	 * @param {DependencyTemplateContext} templateContext the context object | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, { runtimeTemplate, moduleGraph }) { | ||||
| 	apply(dependency, source, { runtimeTemplate, module, moduleGraph }) { | ||||
| 		const dep = /** @type {ImportDependency} */ (dependency); | ||||
| 		const content = runtimeTemplate.moduleNamespacePromise({ | ||||
| 			block: dep.block, | ||||
| 			module: moduleGraph.getModule(dep), | ||||
| 			request: dep.request, | ||||
| 			strict: dep.originModule.buildMeta.strictHarmonyModule, | ||||
| 			strict: module.buildMeta.strictHarmonyModule, | ||||
| 			message: "import()" | ||||
| 		}); | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,9 +12,8 @@ const ModuleDependency = require("./ModuleDependency"); | |||
| /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */ | ||||
| 
 | ||||
| class ImportEagerDependency extends ModuleDependency { | ||||
| 	constructor(request, originModule, range) { | ||||
| 	constructor(request, range) { | ||||
| 		super(request); | ||||
| 		this.originModule = originModule; | ||||
| 		this.range = range; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -30,12 +29,12 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends Mod | |||
| 	 * @param {DependencyTemplateContext} templateContext the context object | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, { runtimeTemplate, moduleGraph }) { | ||||
| 	apply(dependency, source, { runtimeTemplate, module, moduleGraph }) { | ||||
| 		const dep = /** @type {ImportEagerDependency} */ (dependency); | ||||
| 		const content = runtimeTemplate.moduleNamespacePromise({ | ||||
| 			module: moduleGraph.getModule(dep), | ||||
| 			request: dep.request, | ||||
| 			strict: dep.originModule.buildMeta.strictHarmonyModule, | ||||
| 			strict: module.buildMeta.strictHarmonyModule, | ||||
| 			message: "import() eager" | ||||
| 		}); | ||||
| 		source.replace(dep.range[0], dep.range[1] - 1, content); | ||||
|  |  | |||
|  | @ -187,18 +187,10 @@ class ImportParserPlugin { | |||
| 				} | ||||
| 
 | ||||
| 				if (mode === "eager") { | ||||
| 					const dep = new ImportEagerDependency( | ||||
| 						param.string, | ||||
| 						parser.state.module, | ||||
| 						expr.range | ||||
| 					); | ||||
| 					const dep = new ImportEagerDependency(param.string, expr.range); | ||||
| 					parser.state.current.addDependency(dep); | ||||
| 				} else if (mode === "weak") { | ||||
| 					const dep = new ImportWeakDependency( | ||||
| 						param.string, | ||||
| 						parser.state.module, | ||||
| 						expr.range | ||||
| 					); | ||||
| 					const dep = new ImportWeakDependency(param.string, expr.range); | ||||
| 					parser.state.current.addDependency(dep); | ||||
| 				} else { | ||||
| 					const depBlock = new ImportDependenciesBlock( | ||||
|  |  | |||
|  | @ -12,9 +12,8 @@ const ModuleDependency = require("./ModuleDependency"); | |||
| /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */ | ||||
| 
 | ||||
| class ImportWeakDependency extends ModuleDependency { | ||||
| 	constructor(request, originModule, range) { | ||||
| 	constructor(request, range) { | ||||
| 		super(request); | ||||
| 		this.originModule = originModule; | ||||
| 		this.range = range; | ||||
| 		this.weak = true; | ||||
| 	} | ||||
|  | @ -31,12 +30,12 @@ ImportWeakDependency.Template = class ImportDependencyTemplate extends ModuleDep | |||
| 	 * @param {DependencyTemplateContext} templateContext the context object | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, { runtimeTemplate, moduleGraph }) { | ||||
| 	apply(dependency, source, { runtimeTemplate, module, moduleGraph }) { | ||||
| 		const dep = /** @type {ImportWeakDependency} */ (dependency); | ||||
| 		const content = runtimeTemplate.moduleNamespacePromise({ | ||||
| 			module: moduleGraph.getModule(dep), | ||||
| 			request: dep.request, | ||||
| 			strict: dep.originModule.buildMeta.strictHarmonyModule, | ||||
| 			strict: module.buildMeta.strictHarmonyModule, | ||||
| 			message: "import() weak", | ||||
| 			weak: true | ||||
| 		}); | ||||
|  |  | |||
|  | @ -17,11 +17,6 @@ const ModuleDependency = require("./ModuleDependency"); | |||
| /** @typedef {import("../util/createHash").Hash} Hash */ | ||||
| 
 | ||||
| class ModuleDecoratorDependency extends ModuleDependency { | ||||
| 	constructor(request, originModule) { | ||||
| 		super(request); | ||||
| 		this.originModule = originModule; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Update the hash | ||||
| 	 * @param {Hash} hash hash to be updated | ||||
|  | @ -50,17 +45,18 @@ ModuleDecoratorDependency.Template = class ModuleDecoratorDependencyTemplate ext | |||
| 	 */ | ||||
| 	getInitFragments(dependency, { runtimeTemplate, moduleGraph }) { | ||||
| 		const dep = /** @type {ModuleDecoratorDependency} */ (dependency); | ||||
| 		const originModule = moduleGraph.getOrigin(dep); | ||||
| 		return [ | ||||
| 			new InitFragment( | ||||
| 				`/* module decorator */ ${ | ||||
| 					dep.originModule.moduleArgument | ||||
| 					originModule.moduleArgument | ||||
| 				} = ${runtimeTemplate.moduleExports({ | ||||
| 					module: moduleGraph.getModule(dep), | ||||
| 					request: dep.request | ||||
| 				})}(${dep.originModule.moduleArgument});\n`,
 | ||||
| 				})}(${originModule.moduleArgument});\n`,
 | ||||
| 				InitFragment.STAGE_PROVIDES, | ||||
| 				0, | ||||
| 				`module decorator ${dep.originModule.id}` | ||||
| 				`module decorator ${originModule.id}` | ||||
| 			) | ||||
| 		]; | ||||
| 	} | ||||
|  |  | |||
|  | @ -1282,7 +1282,7 @@ class HarmonyImportSpecifierDependencyConcatenatedTemplate extends DependencyTem | |||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, templateContext) { | ||||
| 		const { moduleGraph } = templateContext; | ||||
| 		const { moduleGraph, module: parentModule } = templateContext; | ||||
| 		const dep = /** @type {HarmonyImportSpecifierDependency} */ (dependency); | ||||
| 		const module = moduleGraph.getModule(dep); | ||||
| 		const info = this.modulesMap.get(module); | ||||
|  | @ -1292,7 +1292,7 @@ class HarmonyImportSpecifierDependencyConcatenatedTemplate extends DependencyTem | |||
| 		} | ||||
| 		let content; | ||||
| 		const callFlag = dep.call ? "_call" : ""; | ||||
| 		const strictFlag = dep.originModule.buildMeta.strictHarmonyModule | ||||
| 		const strictFlag = parentModule.buildMeta.strictHarmonyModule | ||||
| 			? "_strict" | ||||
| 			: ""; | ||||
| 		const id = dep.getId(moduleGraph); | ||||
|  | @ -1371,7 +1371,7 @@ class HarmonyExportSpecifierDependencyConcatenatedTemplate extends DependencyTem | |||
| 	 */ | ||||
| 	getInitFragments(dependency, templateContext) { | ||||
| 		const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency); | ||||
| 		if (dep.originModule === this.rootModule) { | ||||
| 		if (templateContext.module === this.rootModule) { | ||||
| 			return this.originalTemplate.getInitFragments(dep, templateContext); | ||||
| 		} else { | ||||
| 			return null; | ||||
|  | @ -1385,8 +1385,7 @@ class HarmonyExportSpecifierDependencyConcatenatedTemplate extends DependencyTem | |||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, templateContext) { | ||||
| 		const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency); | ||||
| 		if (dep.originModule === this.rootModule) { | ||||
| 		if (templateContext.module === this.rootModule) { | ||||
| 			this.originalTemplate.apply(dependency, source, templateContext); | ||||
| 		} | ||||
| 	} | ||||
|  | @ -1405,17 +1404,13 @@ class HarmonyExportExpressionDependencyConcatenatedTemplate extends DependencyTe | |||
| 	 * @param {DependencyTemplateContext} templateContext the context object | ||||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply( | ||||
| 		dependency, | ||||
| 		source, | ||||
| 		{ runtimeTemplate, dependencyTemplates, moduleGraph } | ||||
| 	) { | ||||
| 	apply(dependency, source, { module, moduleGraph }) { | ||||
| 		const dep = /** @type {HarmonyExportExpressionDependency} */ (dependency); | ||||
| 		let content = | ||||
| 			"/* harmony default export */ var __WEBPACK_MODULE_DEFAULT_EXPORT__ = "; | ||||
| 		if (dep.originModule === this.rootModule) { | ||||
| 			const used = dep.originModule.getUsedName(moduleGraph, "default"); | ||||
| 			const exportsName = dep.originModule.exportsArgument; | ||||
| 		if (module === this.rootModule) { | ||||
| 			const used = module.getUsedName(moduleGraph, "default"); | ||||
| 			const exportsName = module.exportsArgument; | ||||
| 			if (used) { | ||||
| 				content += `${exportsName}[${JSON.stringify(used)}] = `; | ||||
| 			} | ||||
|  | @ -1497,14 +1492,14 @@ class HarmonyExportImportedSpecifierDependencyConcatenatedTemplate extends Depen | |||
| 	 * @returns {void} | ||||
| 	 */ | ||||
| 	apply(dependency, source, templateContext) { | ||||
| 		const { moduleGraph } = templateContext; | ||||
| 		const { moduleGraph, module } = templateContext; | ||||
| 		const dep = /** @type {HarmonyExportImportedSpecifierDependency} */ (dependency); | ||||
| 		if (dep.originModule === this.rootModule) { | ||||
| 		if (module === this.rootModule) { | ||||
| 			if (this.modulesMap.get(moduleGraph.getModule(dep))) { | ||||
| 				const exportDefs = this.getExports(dep, { moduleGraph }); | ||||
| 				for (const def of exportDefs) { | ||||
| 					const info = this.modulesMap.get(def.module); | ||||
| 					const used = dep.originModule.getUsedName(moduleGraph, def.name); | ||||
| 					const used = module.getUsedName(moduleGraph, def.name); | ||||
| 					if (!used) { | ||||
| 						source.insert( | ||||
| 							-1, | ||||
|  | @ -1512,7 +1507,7 @@ class HarmonyExportImportedSpecifierDependencyConcatenatedTemplate extends Depen | |||
| 						); | ||||
| 					} | ||||
| 					let finalName; | ||||
| 					const strictFlag = dep.originModule.buildMeta.strictHarmonyModule | ||||
| 					const strictFlag = module.buildMeta.strictHarmonyModule | ||||
| 						? "_strict" | ||||
| 						: ""; | ||||
| 					if (def.id === true) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue