mirror of https://github.com/webpack/webpack.git
refactor ModuleGraph to use internal dependency
This commit is contained in:
parent
3bb5263bfd
commit
a875ddba5b
|
|
@ -30,9 +30,20 @@ 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, ModuleGraphConnection>} */
|
||||
/** @type {Map<Dependency, ModuleGraphDependency>} */
|
||||
this._dependencyMap = new Map();
|
||||
/** @type {Map<Module, ModuleGraphModule>} */
|
||||
this._moduleMap = new Map();
|
||||
|
|
@ -40,8 +51,6 @@ 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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -57,6 +66,19 @@ class ModuleGraph {
|
|||
return mgm;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Dependency} dependency the dependency
|
||||
* @returns {ModuleGraphDependency} the internal dependency
|
||||
*/
|
||||
_getModuleGraphDependency(dependency) {
|
||||
let mgd = this._dependencyMap.get(dependency);
|
||||
if (mgd === undefined) {
|
||||
mgd = new ModuleGraphDependency();
|
||||
this._dependencyMap.set(dependency, mgd);
|
||||
}
|
||||
return mgd;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Dependency} dependency the dependency
|
||||
* @param {DependenciesBlock} block parent block
|
||||
|
|
@ -64,7 +86,9 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
setParents(dependency, block, module) {
|
||||
this._parentsMap.set(dependency, { module, block });
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
mgd.parentBlock = block;
|
||||
mgd.parentModule = module;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -72,8 +96,8 @@ class ModuleGraph {
|
|||
* @returns {Module} parent module
|
||||
*/
|
||||
getParentModule(dependency) {
|
||||
const entry = this._parentsMap.get(dependency);
|
||||
return entry !== undefined ? entry.module : null;
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
return mgd.parentModule;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -81,8 +105,8 @@ class ModuleGraph {
|
|||
* @returns {DependenciesBlock} parent block
|
||||
*/
|
||||
getParentBlock(dependency) {
|
||||
const entry = this._parentsMap.get(dependency);
|
||||
return entry !== undefined ? entry.block : null;
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
return mgd.parentBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -97,7 +121,8 @@ class ModuleGraph {
|
|||
dependency,
|
||||
module
|
||||
);
|
||||
this._dependencyMap.set(dependency, connection);
|
||||
const mgd = this._getModuleGraphDependency(dependency);
|
||||
mgd.connection = connection;
|
||||
const connections = this._getModuleGraphModule(module).incomingConnections;
|
||||
connections.add(connection);
|
||||
const originConnections = this._getModuleGraphModule(originModule)
|
||||
|
|
@ -111,7 +136,7 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
updateModule(dependency, module) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
if (connection.module === module) return;
|
||||
const oldMgm = this._getModuleGraphModule(connection.module);
|
||||
oldMgm.incomingConnections.delete(connection);
|
||||
|
|
@ -126,7 +151,7 @@ class ModuleGraph {
|
|||
* @returns {void}
|
||||
*/
|
||||
addExplanation(dependency, explanation) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
connection.addExplanation(explanation);
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +200,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referenced module
|
||||
*/
|
||||
getResolvedModule(dependency) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
return connection !== undefined ? connection.resolvedModule : null;
|
||||
}
|
||||
|
||||
|
|
@ -184,7 +209,7 @@ class ModuleGraph {
|
|||
* @returns {ModuleGraphConnection | undefined} the connection
|
||||
*/
|
||||
getConnection(dependency) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
return connection;
|
||||
}
|
||||
|
||||
|
|
@ -193,7 +218,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referenced module
|
||||
*/
|
||||
getModule(dependency) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
return connection !== undefined ? connection.module : null;
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +227,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the referencing module
|
||||
*/
|
||||
getOrigin(dependency) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
return connection !== undefined ? connection.originModule : null;
|
||||
}
|
||||
|
||||
|
|
@ -211,7 +236,7 @@ class ModuleGraph {
|
|||
* @returns {Module} the original referencing module
|
||||
*/
|
||||
getResolvedOrigin(dependency) {
|
||||
const connection = this._dependencyMap.get(dependency);
|
||||
const { connection } = this._getModuleGraphDependency(dependency);
|
||||
return connection !== undefined ? connection.resolvedOriginModule : null;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue