WXL
3 天以前 9bce51f651aad297ef9eb6df832bfdaf1de05d84
node_modules/webpack/lib/ModuleGraph.js
@@ -28,20 +28,24 @@
/** @typedef {import("./util/comparators").DependencySourceOrder} DependencySourceOrder */
/**
 * Defines the optimization bailout function callback.
 * @callback OptimizationBailoutFunction
 * @param {RequestShortener} requestShortener
 * @returns {string}
 */
/** @type {Iterable<ModuleGraphConnection>} */
const EMPTY_SET = new Set();
/**
 * Gets connections by key.
 * @template {Module | null | undefined} T
 * @param {SortableSet<ModuleGraphConnection>} set input
 * @param {(connection: ModuleGraphConnection) => T} getKey function to extract key from connection
 * @returns {ReadonlyMap<T, ReadonlyArray<ModuleGraphConnection>>} mapped by key
 */
const getConnectionsByKey = (set, getKey) => {
   /** @type {Map<T, ModuleGraphConnection[]>} */
   const map = new Map();
   /** @type {T | 0} */
   let lastKey = 0;
@@ -69,6 +73,7 @@
};
/**
 * Gets connections by origin module.
 * @param {SortableSet<ModuleGraphConnection>} set input
 * @returns {ReadonlyMap<Module | undefined | null, ReadonlyArray<ModuleGraphConnection>>} mapped by origin module
 */
@@ -76,6 +81,7 @@
   getConnectionsByKey(set, (connection) => connection.originModule);
/**
 * Gets connections by module.
 * @param {SortableSet<ModuleGraphConnection>} set input
 * @returns {ReadonlyMap<Module | undefined, ReadonlyArray<ModuleGraphConnection>>} mapped by module
 */
@@ -123,6 +129,7 @@
/** @typedef {import("./dependencies/HarmonyExportImportedSpecifierDependency").idsSymbol} HarmonyExportImportedSpecifierDependencyIDsSymbol */
/**
 * Defines the known meta type used by this module.
 * @typedef {object} KnownMeta
 * @property {Map<Module, string>=} importVarMap
 * @property {Map<Module, string>=} deferredImportVarMap
@@ -169,9 +176,16 @@
       * @private
       */
      this._dependencySourceOrderMap = new WeakMap();
      /**
       * @type {Set<Module>}
       * @private
       */
      this._modulesNeedingSort = new Set();
   }
   /**
    * Get module graph module.
    * @param {Module} module the module
    * @returns {ModuleGraphModule} the internal module
    */
@@ -185,6 +199,7 @@
   }
   /**
    * Updates parents using the provided dependency.
    * @param {Dependency} dependency the dependency
    * @param {DependenciesBlock} block parent block
    * @param {Module} module parent module
@@ -198,6 +213,7 @@
   }
   /**
    * Sets parent dependencies block index.
    * @param {Dependency} dependency the dependency
    * @param {number} index the index
    * @returns {void}
@@ -207,6 +223,7 @@
   }
   /**
    * Gets parent module.
    * @param {Dependency} dependency the dependency
    * @returns {Module | undefined} parent module
    */
@@ -215,6 +232,7 @@
   }
   /**
    * Returns parent block.
    * @param {Dependency} dependency the dependency
    * @returns {DependenciesBlock | undefined} parent block
    */
@@ -223,6 +241,7 @@
   }
   /**
    * Gets parent block index.
    * @param {Dependency} dependency the dependency
    * @returns {number} index
    */
@@ -231,6 +250,7 @@
   }
   /**
    * Sets resolved module.
    * @param {Module | null} originModule the referencing module
    * @param {Dependency} dependency the referencing dependency
    * @param {Module} module the referenced module
@@ -263,6 +283,7 @@
   }
   /**
    * Updates module using the provided dependency.
    * @param {Dependency} dependency the referencing dependency
    * @param {Module} module the referenced module
    * @returns {void}
@@ -286,6 +307,7 @@
   }
   /**
    * Updates parent using the provided dependency.
    * @param {Dependency} dependency the need update dependency
    * @param {ModuleGraphConnection=} connection the target connection
    * @param {Module=} parentModule the parent module
@@ -305,17 +327,15 @@
      // import { a, b } from "lib" -> a and b have the same source order -> a = b = 1
      // import { d } from "lib/d" -> d = 2
      const currentSourceOrder =
         /** @type { HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */ (
            dependency
         ).sourceOrder;
         /** @type {HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */
         (dependency).sourceOrder;
      // lib/index.js (reexport)
      // import { a } from "lib/a" -> a = 0
      // import { b } from "lib/b" -> b = 1
      const originSourceOrder =
         /** @type { HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */ (
            originDependency
         ).sourceOrder;
         /** @type {HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */
         (originDependency).sourceOrder;
      if (
         typeof currentSourceOrder === "number" &&
         typeof originSourceOrder === "number"
@@ -330,20 +350,33 @@
            sub: originSourceOrder
         });
         // If dependencies like HarmonyImportSideEffectDependency and HarmonyImportSpecifierDependency have a SourceOrder,
         // we sort based on it; otherwise, we preserve the original order.
         sortWithSourceOrder(
            parentModule.dependencies,
            this._dependencySourceOrderMap
         );
         for (const [index, dep] of parentModule.dependencies.entries()) {
            this.setParentDependenciesBlockIndex(dep, index);
         }
         // Save for later batch sorting
         this._modulesNeedingSort.add(parentModule);
      }
   }
   /**
    * Finish update parent.
    * @returns {void}
    */
   finishUpdateParent() {
      if (this._modulesNeedingSort.size === 0) {
         return;
      }
      for (const mod of this._modulesNeedingSort) {
         // If dependencies like HarmonyImportSideEffectDependency and HarmonyImportSpecifierDependency have a SourceOrder,
         // we sort based on it; otherwise, we preserve the original order.
         sortWithSourceOrder(
            mod.dependencies,
            this._dependencySourceOrderMap,
            (dep, index) => this.setParentDependenciesBlockIndex(dep, index)
         );
      }
      this._modulesNeedingSort.clear();
   }
   /**
    * Removes connection.
    * @param {Dependency} dependency the referencing dependency
    * @returns {void}
    */
@@ -362,6 +395,7 @@
   }
   /**
    * Adds the provided dependency to the module graph.
    * @param {Dependency} dependency the referencing dependency
    * @param {string} explanation an explanation
    * @returns {void}
@@ -374,6 +408,7 @@
   }
   /**
    * Clones module attributes.
    * @param {Module} sourceModule the source module
    * @param {Module} targetModule the target module
    * @returns {void}
@@ -389,6 +424,7 @@
   }
   /**
    * Removes module attributes.
    * @param {Module} module the module
    * @returns {void}
    */
@@ -401,6 +437,7 @@
   }
   /**
    * Removes all module attributes.
    * @returns {void}
    */
   removeAllModuleAttributes() {
@@ -413,6 +450,7 @@
   }
   /**
    * Move module connections.
    * @param {Module} oldModule the old referencing module
    * @param {Module} newModule the new referencing module
    * @param {FilterConnection} filterConnection filter predicate for replacement
@@ -450,6 +488,7 @@
   }
   /**
    * Copies outgoing module connections.
    * @param {Module} oldModule the old referencing module
    * @param {Module} newModule the new referencing module
    * @param {FilterConnection} filterConnection filter predicate for replacement
@@ -481,6 +520,7 @@
   }
   /**
    * Adds the provided module to the module graph.
    * @param {Module} module the referenced module
    * @param {string} explanation an explanation why it's referenced
    * @returns {void}
@@ -491,6 +531,7 @@
   }
   /**
    * Gets resolved module.
    * @param {Dependency} dependency the dependency to look for a referenced module
    * @returns {Module | null} the referenced module
    */
@@ -500,6 +541,7 @@
   }
   /**
    * Returns the connection.
    * @param {Dependency} dependency the dependency to look for a referenced module
    * @returns {ModuleGraphConnection | undefined} the connection
    */
@@ -513,6 +555,7 @@
               mgm._unassignedConnections &&
               mgm._unassignedConnections.length !== 0
            ) {
               /** @type {undefined | ModuleGraphConnection} */
               let foundConnection;
               for (const connection of mgm._unassignedConnections) {
                  this._dependencyMap.set(
@@ -536,6 +579,7 @@
   }
   /**
    * Returns the referenced module.
    * @param {Dependency} dependency the dependency to look for a referenced module
    * @returns {Module | null} the referenced module
    */
@@ -545,6 +589,7 @@
   }
   /**
    * Returns the referencing module.
    * @param {Dependency} dependency the dependency to look for a referencing module
    * @returns {Module | null} the referencing module
    */
@@ -554,6 +599,7 @@
   }
   /**
    * Gets resolved origin.
    * @param {Dependency} dependency the dependency to look for a referencing module
    * @returns {Module | null} the original referencing module
    */
@@ -563,6 +609,7 @@
   }
   /**
    * Gets incoming connections.
    * @param {Module} module the module
    * @returns {Iterable<ModuleGraphConnection>} reasons why a module is included
    */
@@ -572,6 +619,7 @@
   }
   /**
    * Gets outgoing connections.
    * @param {Module} module the module
    * @returns {Iterable<ModuleGraphConnection>} list of outgoing connections
    */
@@ -581,6 +629,7 @@
   }
   /**
    * Gets incoming connections by origin module.
    * @param {Module} module the module
    * @returns {ReadonlyMap<Module | undefined | null, ReadonlyArray<ModuleGraphConnection>>} reasons why a module is included, in a map by source module
    */
@@ -590,6 +639,7 @@
   }
   /**
    * Gets outgoing connections by module.
    * @param {Module} module the module
    * @returns {ReadonlyMap<Module | undefined, ReadonlyArray<ModuleGraphConnection>> | undefined} connections to modules, in a map by module
    */
@@ -601,6 +651,7 @@
   }
   /**
    * Returns the module profile.
    * @param {Module} module the module
    * @returns {ModuleProfile | undefined} the module profile
    */
@@ -610,6 +661,7 @@
   }
   /**
    * Updates profile using the provided module.
    * @param {Module} module the module
    * @param {ModuleProfile | undefined} profile the module profile
    * @returns {void}
@@ -620,6 +672,7 @@
   }
   /**
    * Returns the issuer module.
    * @param {Module} module the module
    * @returns {Issuer} the issuer module
    */
@@ -629,6 +682,7 @@
   }
   /**
    * Updates issuer using the provided module.
    * @param {Module} module the module
    * @param {Module | null} issuer the issuer module
    * @returns {void}
@@ -639,6 +693,7 @@
   }
   /**
    * Sets issuer if unset.
    * @param {Module} module the module
    * @param {Module | null} issuer the issuer module
    * @returns {void}
@@ -649,6 +704,7 @@
   }
   /**
    * Gets optimization bailout.
    * @param {Module} module the module
    * @returns {OptimizationBailouts} optimization bailouts
    */
@@ -658,6 +714,7 @@
   }
   /**
    * Gets provided exports.
    * @param {Module} module the module
    * @returns {null | true | ExportInfoName[]} the provided exports
    */
@@ -667,6 +724,7 @@
   }
   /**
    * Checks whether this module graph is export provided.
    * @param {Module} module the module
    * @param {ExportInfoName | ExportInfoName[]} exportName a name of an export
    * @returns {boolean | null} true, if the export is provided by the module.
@@ -680,6 +738,7 @@
   }
   /**
    * Returns info about the exports.
    * @param {Module} module the module
    * @returns {ExportsInfo} info about the exports
    */
@@ -689,6 +748,7 @@
   }
   /**
    * Returns info about the export.
    * @param {Module} module the module
    * @param {string} exportName the export
    * @returns {ExportInfo} info about the export
@@ -699,6 +759,7 @@
   }
   /**
    * Gets read only export info.
    * @param {Module} module the module
    * @param {string} exportName the export
    * @returns {ExportInfo} info about the export (do not modify)
@@ -709,6 +770,7 @@
   }
   /**
    * Returns the used exports.
    * @param {Module} module the module
    * @param {RuntimeSpec} runtime the runtime
    * @returns {false | true | SortableSet<string> | null} the used exports
@@ -724,6 +786,7 @@
   }
   /**
    * Gets pre order index.
    * @param {Module} module the module
    * @returns {number | null} the index of the module
    */
@@ -733,6 +796,7 @@
   }
   /**
    * Gets post order index.
    * @param {Module} module the module
    * @returns {number | null} the index of the module
    */
@@ -742,6 +806,7 @@
   }
   /**
    * Sets pre order index.
    * @param {Module} module the module
    * @param {number} index the index of the module
    * @returns {void}
@@ -752,6 +817,7 @@
   }
   /**
    * Sets pre order index if unset.
    * @param {Module} module the module
    * @param {number} index the index of the module
    * @returns {boolean} true, if the index was set
@@ -766,6 +832,7 @@
   }
   /**
    * Sets post order index.
    * @param {Module} module the module
    * @param {number} index the index of the module
    * @returns {void}
@@ -776,6 +843,7 @@
   }
   /**
    * Sets post order index if unset.
    * @param {Module} module the module
    * @param {number} index the index of the module
    * @returns {boolean} true, if the index was set
@@ -790,6 +858,7 @@
   }
   /**
    * Returns the depth of the module.
    * @param {Module} module the module
    * @returns {number | null} the depth of the module
    */
@@ -799,6 +868,7 @@
   }
   /**
    * Updates depth using the provided module.
    * @param {Module} module the module
    * @param {number} depth the depth of the module
    * @returns {void}
@@ -809,6 +879,7 @@
   }
   /**
    * Sets depth if lower.
    * @param {Module} module the module
    * @param {number} depth the depth of the module
    * @returns {boolean} true, if the depth was set
@@ -823,6 +894,7 @@
   }
   /**
    * Checks whether this module graph is async.
    * @param {Module} module the module
    * @returns {boolean} true, if the module is async
    */
@@ -832,6 +904,7 @@
   }
   /**
    * Checks whether this module graph is deferred.
    * @param {Module} module the module
    * @returns {boolean} true, if the module is used as a deferred module at least once
    */
@@ -851,6 +924,7 @@
   }
   /**
    * Updates async using the provided module.
    * @param {Module} module the module
    * @returns {void}
    */
@@ -860,6 +934,7 @@
   }
   /**
    * Returns metadata.
    * @param {MetaKey} thing any thing
    * @returns {Meta} metadata
    */
@@ -873,6 +948,7 @@
   }
   /**
    * Gets meta if existing.
    * @param {MetaKey} thing any thing
    * @returns {Meta | undefined} metadata
    */
@@ -881,6 +957,7 @@
   }
   /**
    * Processes the provided cache stage.
    * @param {string=} cacheStage a persistent stage name for caching
    */
   freeze(cacheStage) {
@@ -894,6 +971,7 @@
   }
   /**
    * Returns computed value or cached.
    * @template {EXPECTED_ANY[]} T
    * @template R
    * @param {(moduleGraph: ModuleGraph, ...args: T) => R} fn computer
@@ -906,6 +984,7 @@
   }
   /**
    * Sets module mem caches.
    * @param {ModuleMemCaches} moduleMemCaches mem caches for modules for better caching
    */
   setModuleMemCaches(moduleMemCaches) {
@@ -913,6 +992,7 @@
   }
   /**
    * Dependency cache provide.
    * @template {Dependency} D
    * @template {EXPECTED_ANY[]} ARGS
    * @template R
@@ -943,6 +1023,8 @@
   // TODO remove in webpack 6
   /**
    * Gets module graph for module.
    * @deprecated
    * @param {Module} module the module
    * @param {string} deprecateMessage message for the deprecation message
    * @param {string} deprecationCode code for the deprecation
@@ -953,6 +1035,7 @@
      if (fn) return fn(module);
      const newFn = util.deprecate(
         /**
          * Handles the callback logic for this hook.
          * @param {Module} module the module
          * @returns {ModuleGraph} the module graph
          */
@@ -976,6 +1059,8 @@
   // TODO remove in webpack 6
   /**
    * Sets module graph for module.
    * @deprecated
    * @param {Module} module the module
    * @param {ModuleGraph} moduleGraph the module graph
    * @returns {void}
@@ -986,6 +1071,8 @@
   // TODO remove in webpack 6
   /**
    * Clear module graph for module.
    * @deprecated
    * @param {Module} module the module
    * @returns {void}
    */