You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.8 KiB
80 lines
2.8 KiB
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
|
|
"use strict"; |
|
|
|
const makeSerializable = require("../util/makeSerializable"); |
|
const HarmonyImportDependency = require("./HarmonyImportDependency"); |
|
|
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */ |
|
/** @typedef {import("../Dependency")} Dependency */ |
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */ |
|
/** @typedef {import("../InitFragment")} InitFragment */ |
|
/** @typedef {import("../Module")} Module */ |
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */ |
|
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */ |
|
/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */ |
|
/** @typedef {import("../util/Hash")} Hash */ |
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */ |
|
|
|
class HarmonyImportSideEffectDependency extends HarmonyImportDependency { |
|
constructor(request, sourceOrder, assertions) { |
|
super(request, sourceOrder, assertions); |
|
} |
|
|
|
get type() { |
|
return "harmony side effect evaluation"; |
|
} |
|
|
|
/** |
|
* @param {ModuleGraph} moduleGraph module graph |
|
* @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active |
|
*/ |
|
getCondition(moduleGraph) { |
|
return connection => { |
|
const refModule = connection.resolvedModule; |
|
if (!refModule) return true; |
|
return refModule.getSideEffectsConnectionState(moduleGraph); |
|
}; |
|
} |
|
|
|
/** |
|
* @param {ModuleGraph} moduleGraph the module graph |
|
* @returns {ConnectionState} how this dependency connects the module to referencing modules |
|
*/ |
|
getModuleEvaluationSideEffectsState(moduleGraph) { |
|
const refModule = moduleGraph.getModule(this); |
|
if (!refModule) return true; |
|
return refModule.getSideEffectsConnectionState(moduleGraph); |
|
} |
|
} |
|
|
|
makeSerializable( |
|
HarmonyImportSideEffectDependency, |
|
"webpack/lib/dependencies/HarmonyImportSideEffectDependency" |
|
); |
|
|
|
HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDependencyTemplate extends ( |
|
HarmonyImportDependency.Template |
|
) { |
|
/** |
|
* @param {Dependency} dependency the dependency for which the template should be applied |
|
* @param {ReplaceSource} source the current replace source which can be modified |
|
* @param {DependencyTemplateContext} templateContext the context object |
|
* @returns {void} |
|
*/ |
|
apply(dependency, source, templateContext) { |
|
const { moduleGraph, concatenationScope } = templateContext; |
|
if (concatenationScope) { |
|
const module = moduleGraph.getModule(dependency); |
|
if (concatenationScope.isModuleInScope(module)) { |
|
return; |
|
} |
|
} |
|
super.apply(dependency, source, templateContext); |
|
} |
|
}; |
|
|
|
module.exports = HarmonyImportSideEffectDependency;
|
|
|