| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const DependencyReference = require("./DependencyReference");const ModuleDependency = require("./ModuleDependency");const Template = require("../Template");class HarmonyImportDependency extends ModuleDependency {	constructor(request, originModule, sourceOrder, parserScope) {		super(request);		this.redirectedModule = undefined;		this.originModule = originModule;		this.sourceOrder = sourceOrder;		this.parserScope = parserScope;	}	get _module() {		return this.redirectedModule || this.module;	}	getReference() {		if (!this._module) return null;		return new DependencyReference(			this._module,			false,			this.weak,			this.sourceOrder		);	}	getImportVar() {		let importVarMap = this.parserScope.importVarMap;		if (!importVarMap) this.parserScope.importVarMap = importVarMap = new Map();		let importVar = importVarMap.get(this._module);		if (importVar) return importVar;		importVar = `${Template.toIdentifier(			`${this.userRequest}`		)}__WEBPACK_IMPORTED_MODULE_${importVarMap.size}__`;		importVarMap.set(this._module, importVar);		return importVar;	}	getImportStatement(update, runtime) {		return runtime.importStatement({			update,			module: this._module,			importVar: this.getImportVar(),			request: this.request,			originModule: this.originModule		});	}	updateHash(hash) {		super.updateHash(hash);		const importedModule = this._module;		hash.update(			(importedModule &&				(!importedModule.buildMeta || importedModule.buildMeta.exportsType)) +				""		);		hash.update((importedModule && importedModule.id) + "");	}	disconnect() {		super.disconnect();		this.redirectedModule = undefined;	}}module.exports = HarmonyImportDependency;const importEmittedMap = new WeakMap();HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate {	apply(dep, source, runtime) {		// no-op	}	getHarmonyInitOrder(dep) {		return dep.sourceOrder;	}	static isImportEmitted(dep, source) {		let sourceInfo = importEmittedMap.get(source);		if (!sourceInfo) return false;		const key = dep._module || dep.request;		return key && sourceInfo.emittedImports.get(key);	}	harmonyInit(dep, source, runtime, dependencyTemplates) {		let sourceInfo = importEmittedMap.get(source);		if (!sourceInfo) {			importEmittedMap.set(				source,				(sourceInfo = {					emittedImports: new Map()				})			);		}		const key = dep._module || dep.request;		if (key && sourceInfo.emittedImports.get(key)) return;		sourceInfo.emittedImports.set(key, true);		const content = dep.getImportStatement(false, runtime);		source.insert(-1, content);	}};
 |