| /* |
| 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); |
| } |
| }; |