From 9bce51f651aad297ef9eb6df832bfdaf1de05d84 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 14:27:54 +0800
Subject: [PATCH] 青岛推送
---
node_modules/webpack/lib/optimize/ConcatenatedModule.js | 150 ++++++++++++++++++++++++++++++++-----------------
1 files changed, 97 insertions(+), 53 deletions(-)
diff --git a/node_modules/webpack/lib/optimize/ConcatenatedModule.js b/node_modules/webpack/lib/optimize/ConcatenatedModule.js
index b57a305..16c7e28 100644
--- a/node_modules/webpack/lib/optimize/ConcatenatedModule.js
+++ b/node_modules/webpack/lib/optimize/ConcatenatedModule.js
@@ -16,7 +16,10 @@
const ConcatenationScope = require("../ConcatenationScope");
const { UsageState } = require("../ExportsInfo");
const Module = require("../Module");
-const { JS_TYPES } = require("../ModuleSourceTypesConstants");
+const {
+ JAVASCRIPT_TYPE,
+ JAVASCRIPT_TYPES
+} = require("../ModuleSourceTypeConstants");
const { JAVASCRIPT_MODULE_TYPE_ESM } = require("../ModuleTypeConstants");
const RuntimeGlobals = require("../RuntimeGlobals");
const Template = require("../Template");
@@ -42,8 +45,7 @@
const createHash = require("../util/createHash");
const { makePathsRelative } = require("../util/identifier");
const makeSerializable = require("../util/makeSerializable");
-const propertyAccess = require("../util/propertyAccess");
-const { propertyName } = require("../util/propertyName");
+const { propertyAccess, propertyName } = require("../util/property");
const {
filterRuntime,
intersectRuntime,
@@ -69,6 +71,7 @@
/** @typedef {import("../Module").FileSystemDependencies} FileSystemDependencies */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
/** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
/** @typedef {import("../Module").LibIdent} LibIdent */
@@ -87,7 +90,8 @@
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("../util/Hash")} Hash */
-/** @typedef {typeof import("../util/Hash")} HashConstructor */
+/** @typedef {import("../util/Hash").HashFunction} HashFunction */
+/** @typedef {import("../util/concatenate").UsedNames} UsedNames */
/** @typedef {import("../util/concatenate").ScopeInfo} ScopeInfo */
/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
/** @typedef {import("../util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
@@ -132,8 +136,10 @@
* @property {ExportName} exportName
*/
-/** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo } ModuleInfo */
-/** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo | ReferenceToModuleInfo } ModuleInfoOrReference */
+/** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo} ModuleInfo */
+/** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo | ReferenceToModuleInfo} ModuleInfoOrReference */
+
+/** @typedef {Map<string, string>} ExportMap */
/**
* @typedef {object} ConcatenatedModuleInfo
@@ -148,8 +154,8 @@
* @property {Scope | undefined} globalScope
* @property {Scope | undefined} moduleScope
* @property {Map<string, string>} internalNames
- * @property {Map<string, string> | undefined} exportMap
- * @property {Map<string, string> | undefined} rawExportMap
+ * @property {ExportMap | undefined} exportMap
+ * @property {ExportMap | undefined} rawExportMap
* @property {string=} namespaceExportSymbol
* @property {string | undefined} namespaceObjectName
* @property {ConcatenationScope | undefined} concatenationScope
@@ -192,7 +198,7 @@
/**
* @template T
* @param {string} property property
- * @param {function(T[keyof T], T[keyof T]): 0 | 1 | -1} comparator comparator
+ * @param {(a: T[keyof T], b: T[keyof T]) => 0 | 1 | -1} comparator comparator
* @returns {Comparator<T>} comparator
*/
@@ -222,6 +228,7 @@
}
return 0;
};
+
const bySourceOrder = createComparator("sourceOrder", compareNumbers);
const byRangeStart = createComparator("rangeStart", compareNumbers);
@@ -648,7 +655,9 @@
);
{
const { ids, comment } = binding;
+ /** @type {string} */
let reference;
+ /** @type {boolean} */
let isPropertyAccess;
if ("rawName" in binding) {
reference = `${binding.rawName}${comment || ""}${propertyAccess(ids)}`;
@@ -684,7 +693,7 @@
/**
* @typedef {object} ConcatenateModuleHooks
- * @property {SyncBailHook<[ConcatenatedModule], boolean>} onDemandExportsGeneration
+ * @property {SyncBailHook<[ConcatenatedModule, RuntimeSpec[], string, Record<string, string>], boolean>} onDemandExportsGeneration
* @property {SyncBailHook<[Partial<ConcatenatedModuleInfo>, ConcatenatedModuleInfo], boolean | void>} concatenatedModuleInfo
*/
@@ -700,7 +709,7 @@
* @param {RuntimeSpec} runtime the runtime
* @param {Compilation} compilation the compilation
* @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
- * @param {string | HashConstructor=} hashFunction hash function to use
+ * @param {HashFunction=} hashFunction hash function to use
* @returns {ConcatenatedModule} the module
*/
static create(
@@ -734,7 +743,12 @@
let hooks = compilationHooksMap.get(compilation);
if (hooks === undefined) {
hooks = {
- onDemandExportsGeneration: new SyncBailHook(["module"]),
+ onDemandExportsGeneration: new SyncBailHook([
+ "module",
+ "runtimes",
+ "exportsFinalName",
+ "exportsSource"
+ ]),
concatenatedModuleInfo: new SyncBailHook([
"updatedInfo",
"concatenatedModuleInfo"
@@ -781,10 +795,11 @@
}
/**
+ * Returns the source types this module can generate.
* @returns {SourceTypes} types available (do not mutate)
*/
getSourceTypes() {
- return JS_TYPES;
+ return JAVASCRIPT_TYPES;
}
get modules() {
@@ -792,6 +807,7 @@
}
/**
+ * Returns the unique identifier used to reference this module.
* @returns {string} a unique identifier of the module
*/
identifier() {
@@ -799,6 +815,7 @@
}
/**
+ * Returns a human-readable identifier for this module.
* @param {RequestShortener} requestShortener the request shortener
* @returns {string} a user readable identifier of the module
*/
@@ -809,6 +826,7 @@
}
/**
+ * Gets the library identifier.
* @param {LibIdentOptions} options options
* @returns {LibIdent | null} an identifier for library inclusion
*/
@@ -817,6 +835,7 @@
}
/**
+ * Returns the path used when matching this module against rule conditions.
* @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
*/
nameForCondition() {
@@ -824,6 +843,7 @@
}
/**
+ * Gets side effects connection state.
* @param {ModuleGraph} moduleGraph the module graph
* @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
*/
@@ -832,6 +852,7 @@
}
/**
+ * Builds the module using the provided compilation context.
* @param {WebpackOptions} options webpack options
* @param {Compilation} compilation the compilation
* @param {ResolverWithOptions} resolver the resolver
@@ -844,6 +865,7 @@
const { moduleArgument, exportsArgument } =
/** @type {BuildInfo} */
(rootModule.buildInfo);
+ /** @type {BuildInfo} */
this.buildInfo = {
strict: true,
cacheable: true,
@@ -862,8 +884,7 @@
for (const m of this._modules) {
// populate cacheable
if (!(/** @type {BuildInfo} */ (m.buildInfo).cacheable)) {
- /** @type {BuildInfo} */
- (this.buildInfo).cacheable = false;
+ this.buildInfo.cacheable = false;
}
// populate dependencies
@@ -901,7 +922,7 @@
const { assets, assetsInfo, topLevelDeclarations, needCreateRequire } =
/** @type {BuildInfo} */ (m.buildInfo);
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+ const buildInfo = this.buildInfo;
// populate topLevelDeclarations
if (topLevelDeclarations) {
@@ -944,6 +965,7 @@
}
/**
+ * Returns the estimated size for the requested source type.
* @param {string=} type the source type for which the size should be estimated
* @returns {number} the estimated size of the module (must be non-zero)
*/
@@ -987,6 +1009,11 @@
const references = connections
.filter((connection) => {
if (!(connection.dependency instanceof HarmonyImportDependency)) {
+ return false;
+ }
+ if (
+ !Module.getSourceBasicTypes(connection.module).has(JAVASCRIPT_TYPE)
+ ) {
return false;
}
return (
@@ -1199,7 +1226,7 @@
* @param {Module} rootModule the root module of the concatenation
* @param {Set<Module>} modules all modules in the concatenation (including the root module)
* @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
- * @param {string | HashConstructor=} hashFunction hash function to use
+ * @param {HashFunction=} hashFunction hash function to use
* @returns {string} the identifier
*/
static _createIdentifier(
@@ -1212,6 +1239,7 @@
/** @type {string} */ (rootModule.context),
associatedObjectForCache
);
+ /** @type {string[]} */
const identifiers = [];
for (const module of modules) {
identifiers.push(cachedMakePathsRelative(module.identifier()));
@@ -1223,6 +1251,7 @@
}
/**
+ * Adds the provided file dependencies to the module.
* @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
* @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
* @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
@@ -1245,6 +1274,7 @@
}
/**
+ * Generates code and runtime requirements for this module.
* @param {CodeGenerationContext} context context for code generation
* @returns {CodeGenerationResult} result
*/
@@ -1254,6 +1284,7 @@
moduleGraph,
chunkGraph,
runtime: generationRuntime,
+ runtimes,
codeGenerationResults
}) {
const { concatenatedModuleInfo } = ConcatenatedModule.getCompilationHooks(
@@ -1289,6 +1320,7 @@
moduleGraph,
chunkGraph,
runtime,
+ runtimes,
/** @type {CodeGenerationResults} */
(codeGenerationResults),
allUsedNames
@@ -1304,6 +1336,7 @@
const usedNamesInScopeInfo = new Map();
// Set of already checked scopes
+ /** @type {Set<Scope>} */
const ignoredScopes = new Set();
// get all global names
@@ -1317,14 +1350,17 @@
// The super class expression in class scopes behaves weird
// We get ranges of all super class expressions to make
// renaming to work correctly
+ /** @typedef {{ range: Range, variables: Variable[] }} ClassInfo */
+ /** @type {WeakMap<Scope, ClassInfo[]>} */
const superClassCache = new WeakMap();
/**
* @param {Scope} scope scope
- * @returns {{ range: Range, variables: Variable[] }[]} result
+ * @returns {ClassInfo[]} result
*/
const getSuperClassExpressions = (scope) => {
const cacheEntry = superClassCache.get(scope);
if (cacheEntry !== undefined) return cacheEntry;
+ /** @type {ClassInfo[]} */
const superClassExpressions = [];
for (const childScope of scope.childScopes) {
if (childScope.type !== "class") continue;
@@ -1407,7 +1443,7 @@
* @param {string} name the name to find a new name for
* @param {ConcatenatedModuleInfo} info the info of the module
* @param {Reference[]} references the references to the name
- * @returns {string|undefined} the new name or undefined if the name is not found
+ * @returns {string | undefined} the new name or undefined if the name is not found
*/
const _findNewName = (name, info, references) => {
const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
@@ -1441,7 +1477,7 @@
* @param {string} name the name to find a new name for
* @param {ConcatenatedModuleInfo} info the info of the module
* @param {Reference[]} references the references to the name
- * @returns {string|undefined} the new name or undefined if the name is not found
+ * @returns {string | undefined} the new name or undefined if the name is not found
*/
const _findNewNameForSpecifier = (name, info, references) => {
const { usedNames: moduleUsedNames, alreadyCheckedScopes } =
@@ -1450,6 +1486,7 @@
info.module.identifier(),
name
);
+ /** @type {UsedNames} */
const referencesUsedNames = new Set();
for (const ref of references) {
addScopeSymbols(
@@ -1521,11 +1558,12 @@
topLevelDeclarations.add(name);
}
}
+ /** @type {string} */
let namespaceObjectName;
if (info.namespaceExportSymbol) {
- namespaceObjectName = info.internalNames.get(
- info.namespaceExportSymbol
- );
+ namespaceObjectName =
+ /** @type {string} */
+ (info.internalNames.get(info.namespaceExportSymbol));
} else {
namespaceObjectName = findNewName(
"namespaceObject",
@@ -1535,13 +1573,8 @@
);
allUsedNames.add(namespaceObjectName);
}
- info.namespaceObjectName =
- /** @type {string} */
- (namespaceObjectName);
- topLevelDeclarations.add(
- /** @type {string} */
- (namespaceObjectName)
- );
+ info.namespaceObjectName = namespaceObjectName;
+ topLevelDeclarations.add(namespaceObjectName);
break;
}
case "external": {
@@ -1624,13 +1657,15 @@
if (info.type === "concatenated") {
const globalScope = /** @type {Scope} */ (info.globalScope);
// group references by name
+ /** @type {Map<string, Reference[]>} */
const referencesByName = new Map();
for (const reference of globalScope.through) {
const name = reference.identifier.name;
if (!referencesByName.has(name)) {
referencesByName.set(name, []);
}
- referencesByName.get(name).push(reference);
+ /** @type {Reference[]} */
+ (referencesByName.get(name)).push(reference);
}
for (const [name, references] of referencesByName) {
const match = ConcatenationScope.matchModuleReference(name);
@@ -1763,6 +1798,7 @@
// define exports
if (exportsMap.size > 0) {
+ /** @type {string[]} */
const definitions = [];
for (const [key, value] of exportsMap) {
definitions.push(
@@ -1771,9 +1807,6 @@
)}`
);
}
-
- const { onDemandExportsGeneration } =
- ConcatenatedModule.getCompilationHooks(this.compilation);
runtimeRequirements.add(RuntimeGlobals.exports);
runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
@@ -1788,21 +1821,24 @@
);
}
- if (onDemandExportsGeneration.call(this)) {
- /** @type {BuildMeta} */ (this.buildMeta).factoryExportsBinding =
- "\n// EXPORTS\n" +
- `${RuntimeGlobals.definePropertyGetters}(${
- this.exportsArgument
- }, {${definitions.join(",")}\n});\n`;
- /** @type {BuildMeta} */ (this.buildMeta).exportsFinalName =
- exportsFinalName;
- } else {
- result.add("\n// EXPORTS\n");
- result.add(
- `${RuntimeGlobals.definePropertyGetters}(${
- this.exportsArgument
- }, {${definitions.join(",")}\n});\n`
- );
+ const exportsSource =
+ "\n// EXPORTS\n" +
+ `${RuntimeGlobals.definePropertyGetters}(${this.exportsArgument}, {${definitions.join(
+ ","
+ )}\n});\n`;
+
+ const { onDemandExportsGeneration } =
+ ConcatenatedModule.getCompilationHooks(this.compilation);
+
+ if (
+ !onDemandExportsGeneration.call(
+ this,
+ runtimes,
+ exportsSource,
+ exportsFinalName
+ )
+ ) {
+ result.add(exportsSource);
}
}
@@ -1814,9 +1850,11 @@
}
// generate namespace objects
+ /** @type {Map<ConcatenatedModuleInfo, string>} */
const namespaceObjectSources = new Map();
for (const info of neededNamespaceObjects) {
if (info.namespaceExportSymbol) continue;
+ /** @type {string[]} */
const nsObj = [];
const exportsInfo = moduleGraph.getExportsInfo(info.module);
for (const exportInfo of exportsInfo.orderedExports) {
@@ -1912,6 +1950,7 @@
// evaluate modules in order
for (const rawInfo of modulesWithInfo) {
+ /** @type {undefined | string} */
let name;
let isConditional = false;
const info = rawInfo.type === "reference" ? rawInfo.target : rawInfo;
@@ -2000,6 +2039,7 @@
}
}
+ /** @type {CodeGenerationResultData} */
const data = new Map();
if (chunkInitFragments.length > 0) {
data.set("chunkInitFragments", chunkInitFragments);
@@ -2008,7 +2048,7 @@
/** @type {CodeGenerationResult} */
const resultEntry = {
- sources: new Map([["javascript", new CachedSource(result)]]),
+ sources: new Map([[JAVASCRIPT_TYPE, new CachedSource(result)]]),
data,
runtimeRequirements
};
@@ -2024,8 +2064,9 @@
* @param {ModuleGraph} moduleGraph moduleGraph
* @param {ChunkGraph} chunkGraph chunkGraph
* @param {RuntimeSpec} runtime runtime
+ * @param {RuntimeSpec[]} runtimes runtimes
* @param {CodeGenerationResults} codeGenerationResults codeGenerationResults
- * @param {Set<string>} usedNames used names
+ * @param {UsedNames} usedNames used names
*/
_analyseModule(
modulesMap,
@@ -2035,6 +2076,7 @@
moduleGraph,
chunkGraph,
runtime,
+ runtimes,
codeGenerationResults,
usedNames
) {
@@ -2055,13 +2097,14 @@
moduleGraph,
chunkGraph,
runtime,
+ runtimes,
concatenationScope,
codeGenerationResults,
- sourceTypes: JS_TYPES
+ sourceTypes: JAVASCRIPT_TYPES
});
const source =
/** @type {Source} */
- (codeGenResult.sources.get("javascript"));
+ (codeGenResult.sources.get(JAVASCRIPT_TYPE));
const data = codeGenResult.data;
const chunkInitFragments = data && data.get("chunkInitFragments");
const code = source.source().toString();
@@ -2211,6 +2254,7 @@
}
/**
+ * Updates the hash with the data contributed by this instance.
* @param {Hash} hash the hash used to track dependencies
* @param {UpdateHashContext} context context
* @returns {void}
--
Gitblit v1.9.3