mirror of https://github.com/webpack/webpack.git
store parents in Dependency
This commit is contained in:
parent
88d90bea14
commit
78ee6fb386
|
|
@ -9,6 +9,7 @@ const memoize = require("./util/memoize");
|
|||
|
||||
/** @typedef {import("webpack-sources").Source} Source */
|
||||
/** @typedef {import("./ChunkGraph")} ChunkGraph */
|
||||
/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
|
||||
/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
|
||||
/** @typedef {import("./Module")} Module */
|
||||
/** @typedef {import("./ModuleGraph")} ModuleGraph */
|
||||
|
|
@ -84,6 +85,10 @@ const getIgnoredModule = memoize(() => {
|
|||
|
||||
class Dependency {
|
||||
constructor() {
|
||||
/** @type {Module} */
|
||||
this._parentModule = undefined;
|
||||
/** @type {DependenciesBlock} */
|
||||
this._parentDependenciesBlock = undefined;
|
||||
// TODO check if this can be moved into ModuleDependency
|
||||
/** @type {boolean} */
|
||||
this.weak = false;
|
||||
|
|
|
|||
|
|
@ -82,20 +82,9 @@ class ModuleGraphModule {
|
|||
}
|
||||
}
|
||||
|
||||
class ModuleGraphDependency {
|
||||
constructor() {
|
||||
/** @type {ModuleGraphConnection} */
|
||||
this.connection = undefined;
|
||||
/** @type {Module} */
|
||||
this.parentModule = undefined;
|
||||
/** @type {DependenciesBlock} */
|
||||
this.parentBlock = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
class ModuleGraph {
|
||||
constructor() {
|
||||
/** @type {Map<Dependency, ModuleGraphDependency>} */
|
||||
/** @type {Map<Dependency, ModuleGraphConnection>} */
|
||||
this._dependencyMap = new Map();
|
||||
/** @type {Map<Module, ModuleGraphModule>} */
|
||||
this._moduleMap = new Map();
|
||||
|
|
@ -137,23 +126,6 @@ class ModuleGraph {
|
|||
return mgm;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Dependency} dependency the dependency
|
||||
* @returns {ModuleGraphDependency} the internal dependency
|
||||
*/
|
||||
_getModuleGraphDependency(dependency) {
|
||||
if (this._cacheModuleGraphDependencyKey === dependency)
|
||||
return this._cacheModuleGraphDependencyValue;
|
||||
let mgd = this._dependencyMap.get(dependency);
|
||||
if (mgd === undefined) {
|
||||
mgd = new ModuleGraphDependency();
|
||||
this._dependencyMap.set(dependency, mgd);
|
||||
}
|
||||
this._cacheModuleGraphDependencyKey = dependency;
|
||||
this._cacheModuleGraphDependencyValue = mgd;
|
||||
return mgd;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Dependency} dependency the dependency
|
||||
* @param {DependenciesBlock} block parent block
|
||||
|
|
@ -161,9 +133,8 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
setParents(dependency, block, module) {
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
mgd.parentBlock = block;
|
||||
mgd.parentModule = module;
|
||||
dependency._parentDependenciesBlock = block;
|
||||
dependency._parentModule = module;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -171,8 +142,7 @@ class ModuleGraph {
|
|||
* @returns {Module} parent module
|
||||
*/
|
||||
getParentModule(dependency) {
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
return mgd.parentModule;
|
||||
return dependency._parentModule;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -180,8 +150,7 @@ class ModuleGraph {
|
|||
* @returns {DependenciesBlock} parent block
|
||||
*/
|
||||
getParentBlock(dependency) {
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
return mgd.parentBlock;
|
||||
return dependency._parentDependenciesBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -199,8 +168,7 @@ class ModuleGraph {
|
|||
dependency.weak,
|
||||
dependency.getCondition(this)
|
||||
);
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
mgd.connection = connection;
|
||||
this._dependencyMap.set(dependency, connection);
|
||||
const connections = this._getModuleGraphModule(module).incomingConnections;
|
||||
connections.add(connection);
|
||||
const mgm = this._getModuleGraphModule(originModule);
|
||||
|
|
@ -216,12 +184,11 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
updateModule(dependency, module) {
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
if (mgd.connection.module === module) return;
|
||||
const { connection } = mgd;
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
if (connection.module === module) return;
|
||||
const newConnection = connection.clone();
|
||||
newConnection.module = module;
|
||||
mgd.connection = newConnection;
|
||||
this._dependencyMap.set(dependency, newConnection);
|
||||
connection.setActive(false);
|
||||
const originMgm = this._getModuleGraphModule(connection.originModule);
|
||||
originMgm.outgoingConnections.add(newConnection);
|
||||
|
|
@ -234,13 +201,12 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
removeConnection(dependency) {
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
const { connection } = mgd;
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const targetMgm = this._getModuleGraphModule(connection.module);
|
||||
targetMgm.incomingConnections.delete(connection);
|
||||
const originMgm = this._getModuleGraphModule(connection.originModule);
|
||||
originMgm.outgoingConnections.delete(connection);
|
||||
mgd.connection = undefined;
|
||||
this._dependencyMap.delete(dependency);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -249,7 +215,7 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
addExplanation(dependency, explanation) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
connection.addExplanation(explanation);
|
||||
}
|
||||
|
||||
|
|
@ -375,7 +341,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referenced module
|
||||
*/
|
||||
getResolvedModule(dependency) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
return connection !== undefined ? connection.resolvedModule : null;
|
||||
}
|
||||
|
||||
|
|
@ -384,7 +350,7 @@ class ModuleGraph {
|
|||
* @returns {ModuleGraphConnection | undefined} the connection
|
||||
*/
|
||||
getConnection(dependency) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
return connection;
|
||||
}
|
||||
|
||||
|
|
@ -393,7 +359,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referenced module
|
||||
*/
|
||||
getModule(dependency) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
return connection !== undefined ? connection.module : null;
|
||||
}
|
||||
|
||||
|
|
@ -402,7 +368,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referencing module
|
||||
*/
|
||||
getOrigin(dependency) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
return connection !== undefined ? connection.originModule : null;
|
||||
}
|
||||
|
||||
|
|
@ -411,7 +377,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the original referencing module
|
||||
*/
|
||||
getResolvedOrigin(dependency) {
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
return connection !== undefined ? connection.resolvedOriginModule : null;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue