From 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 18:09:58 +0800
Subject: [PATCH] 上报转运调试

---
 node_modules/webpack/lib/Module.js |  245 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 220 insertions(+), 25 deletions(-)

diff --git a/node_modules/webpack/lib/Module.js b/node_modules/webpack/lib/Module.js
index 6f8ebef..b97fd4e 100644
--- a/node_modules/webpack/lib/Module.js
+++ b/node_modules/webpack/lib/Module.js
@@ -9,7 +9,11 @@
 const ChunkGraph = require("./ChunkGraph");
 const DependenciesBlock = require("./DependenciesBlock");
 const ModuleGraph = require("./ModuleGraph");
-const { JS_TYPES } = require("./ModuleSourceTypesConstants");
+const {
+	JAVASCRIPT_TYPE,
+	UNKNOWN_TYPE
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_TYPES } = require("./ModuleSourceTypeConstants");
 const RuntimeGlobals = require("./RuntimeGlobals");
 const { first } = require("./util/SetHelpers");
 const { compareChunksById } = require("./util/comparators");
@@ -24,24 +28,26 @@
 /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
 /** @typedef {import("./Compilation")} Compilation */
 /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").FileSystemDependencies} FileSystemDependencies */
 /** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
 /** @typedef {import("./ConcatenationScope")} ConcatenationScope */
 /** @typedef {import("./Dependency")} Dependency */
 /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
 /** @typedef {import("./DependencyTemplate").CssData} CssData */
 /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./ModuleSourceTypeConstants").AllTypes} AllTypes */
 /** @typedef {import("./FileSystemInfo")} FileSystemInfo */
 /** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
 /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
 /** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */
 /** @typedef {import("./ModuleGraph").OptimizationBailouts} OptimizationBailouts */
+/** @typedef {import("./ModuleProfile")} ModuleProfile */
 /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
 /** @typedef {import("./RequestShortener")} RequestShortener */
 /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
 /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
-/** @typedef {import("../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
-
 /**
+ * Defines the init fragment type used by this module.
  * @template T
  * @typedef {import("./InitFragment")<T>} InitFragment
  */
@@ -53,14 +59,20 @@
 /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
 /** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
 /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/**
+ * @template T
+ * @typedef {import("./util/SortableSet")<T>} SortableSet
+ */
 /** @typedef {"namespace" | "default-only" | "default-with-named" | "dynamic"} ExportsType */
 
 /**
+ * Defines the shared type used by this module.
  * @template T
  * @typedef {import("./util/LazySet")<T>} LazySet<T>
  */
 
 /**
+ * Defines the source context type used by this module.
  * @typedef {object} SourceContext
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
@@ -70,16 +82,22 @@
  * @property {string=} type the type of source that should be generated
  */
 
-/** @typedef {ReadonlySet<string>} SourceTypes */
+/** @typedef {AllTypes} KnownSourceType */
+/** @typedef {KnownSourceType | string} SourceType */
+/** @typedef {ReadonlySet<SourceType>} SourceTypes */
+
+/** @typedef {ReadonlySet<typeof JAVASCRIPT_TYPE | string>} BasicSourceTypes */
 
 // TODO webpack 6: compilation will be required in CodeGenerationContext
 /**
+ * Defines the code generation context type used by this module.
  * @typedef {object} CodeGenerationContext
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
  * @property {ModuleGraph} moduleGraph the module graph
  * @property {ChunkGraph} chunkGraph the chunk graph
  * @property {RuntimeSpec} runtime the runtimes code should be generated for
+ * @property {RuntimeSpec[]} runtimes all runtimes code should be generated for
  * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
  * @property {CodeGenerationResults | undefined} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
  * @property {Compilation=} compilation the compilation
@@ -87,6 +105,7 @@
  */
 
 /**
+ * Defines the concatenation bailout reason context type used by this module.
  * @typedef {object} ConcatenationBailoutReasonContext
  * @property {ModuleGraph} moduleGraph the module graph
  * @property {ChunkGraph} chunkGraph the chunk graph
@@ -95,30 +114,60 @@
 /** @typedef {Set<string>} RuntimeRequirements */
 /** @typedef {ReadonlySet<string>} ReadOnlyRuntimeRequirements */
 
-/** @typedef {Map<"topLevelDeclarations", Set<string>> & Map<"chunkInitFragments", InitFragment<EXPECTED_ANY>[]>} KnownCodeGenerationResultDataForJavascriptModules */
-/** @typedef {Map<"url", { ["css-url"]: string }>} KnownCodeGenerationResultDataForCssModules */
-/** @typedef {Map<"filename", string> & Map<"assetInfo", AssetInfo> & Map<"fullContentHash", string>} KnownCodeGenerationResultDataForAssetModules */
-/** @typedef {Map<"share-init", [{ shareScope: string, initStage: number, init: string }]>} KnownCodeGenerationResultForSharing */
-/** @typedef {KnownCodeGenerationResultDataForJavascriptModules & KnownCodeGenerationResultDataForCssModules & KnownCodeGenerationResultDataForAssetModules & KnownCodeGenerationResultForSharing & Map<string, EXPECTED_ANY>} CodeGenerationResultData */
+/**
+ * Defines the all code generation schemas type used by this module.
+ * @typedef {object} AllCodeGenerationSchemas
+ * @property {Set<string>} topLevelDeclarations top level declarations for javascript modules
+ * @property {InitFragment<EXPECTED_ANY>[]} chunkInitFragments chunk init fragments for javascript modules
+ * @property {{ javascript?: string, ["css-url"]?: string }} url url for css and javascript modules
+ * @property {string} filename a filename for asset modules
+ * @property {AssetInfo} assetInfo an asset info for asset modules
+ * @property {string} fullContentHash a full content hash for asset modules
+ * @property {[{ shareScope: string, initStage: number, init: string }]} share-init share-init for modules federation
+ */
 
 /**
+ * Defines the code gen value type used by this module.
+ * @template {string} K
+ * @typedef {K extends keyof AllCodeGenerationSchemas ? AllCodeGenerationSchemas[K] : EXPECTED_ANY} CodeGenValue
+ */
+
+/**
+ * Defines the code gen map overloads type used by this module.
+ * @typedef {object} CodeGenMapOverloads
+ * @property {<K extends string>(key: K) => CodeGenValue<K> | undefined} get
+ * @property {<K extends string>(key: K, value: CodeGenValue<K>) => CodeGenerationResultData} set
+ * @property {<K extends string>(key: K) => boolean} has
+ * @property {<K extends string>(key: K) => boolean} delete
+ */
+
+/**
+ * Defines the code generation result data type used by this module.
+ * @typedef {Omit<Map<string, EXPECTED_ANY>, "get" | "set" | "has" | "delete"> & CodeGenMapOverloads} CodeGenerationResultData
+ */
+
+/** @typedef {Map<SourceType, Source>} Sources */
+
+/**
+ * Defines the code generation result type used by this module.
  * @typedef {object} CodeGenerationResult
- * @property {Map<string, Source>} sources the resulting sources for all source types
+ * @property {Sources} sources the resulting sources for all source types
  * @property {CodeGenerationResultData=} data the resulting data for all source types
  * @property {ReadOnlyRuntimeRequirements | null} runtimeRequirements the runtime requirements
  * @property {string=} hash a hash of the code generation result (will be automatically calculated from sources and runtimeRequirements if not provided)
  */
 
 /**
+ * Defines the lib ident options type used by this module.
  * @typedef {object} LibIdentOptions
  * @property {string} context absolute context path to which lib ident is relative to
  * @property {AssociatedObjectForCache=} associatedObjectForCache object for caching
  */
 
 /**
+ * Defines the known build meta type used by this module.
  * @typedef {object} KnownBuildMeta
  * @property {("default" | "namespace" | "flagged" | "dynamic")=} exportsType
- * @property {CssParserExportType=} exportType
  * @property {(false | "redirect" | "redirect-warn")=} defaultObject
  * @property {boolean=} strictHarmonyModule
  * @property {boolean=} treatAsCommonJs
@@ -126,13 +175,12 @@
  * @property {boolean=} sideEffectFree
  * @property {boolean=} isCSSModule
  * @property {Record<string, string>=} jsIncompatibleExports
- * @property {Record<string, string>=} exportsFinalName
- * @property {string=} factoryExportsBinding
+ * @property {Map<string, Record<string, string>>=} exportsFinalNameByRuntime
+ * @property {Map<string, string>=} exportsSourceByRuntime
  */
 
-/** @typedef {LazySet<string>} FileSystemDependencies */
-
 /**
+ * Defines the known build info type used by this module.
  * @typedef {object} KnownBuildInfo
  * @property {boolean=} cacheable
  * @property {boolean=} parsed
@@ -158,6 +206,7 @@
  * @property {boolean=} javascriptModule for external modules
  * @property {boolean=} active for lazy compilation modules
  * @property {CssData=} cssData for css modules
+ * @property {string=} charset for css modules (charset at-rule)
  * @property {JsonData=} jsonData for json modules
  * @property {Set<string>=} topLevelDeclarations top level declaration names
  */
@@ -166,6 +215,7 @@
 /** @typedef {Map<string, ValueCacheVersion>} ValueCacheVersions */
 
 /**
+ * Defines the need build context type used by this module.
  * @typedef {object} NeedBuildContext
  * @property {Compilation} compilation
  * @property {FileSystemInfo} fileSystemInfo
@@ -180,6 +230,7 @@
 /** @typedef {KnownBuildInfo & Record<string, EXPECTED_ANY>} BuildInfo */
 
 /**
+ * Defines the factory meta type used by this module.
  * @typedef {object} FactoryMeta
  * @property {boolean=} sideEffectFree
  */
@@ -188,10 +239,12 @@
 
 let debugId = 1000;
 
-const DEFAULT_TYPES_UNKNOWN = new Set(["unknown"]);
+/** @type {SourceTypes} */
+const DEFAULT_TYPES_UNKNOWN = new Set([UNKNOWN_TYPE]);
 
 const deprecatedNeedRebuild = util.deprecate(
 	/**
+	 * Handles the callback logic for this hook.
 	 * @param {Module} module the module
 	 * @param {NeedBuildContext} context context info
 	 * @returns {boolean} true, when rebuild is needed
@@ -212,6 +265,7 @@
 
 class Module extends DependenciesBlock {
 	/**
+	 * Creates an instance of Module.
 	 * @param {ModuleTypes | ""} type the module type, when deserializing the type is not known and is an empty string
 	 * @param {(string | null)=} context an optional context
 	 * @param {(string | null)=} layer an optional layer in which the module is
@@ -266,6 +320,8 @@
 	// TODO remove in webpack 6
 	// BACKWARD-COMPAT START
 	/**
+	 * Returns the module id assigned by the chunk graph.
+	 * @deprecated
 	 * @returns {ModuleId | null} module id
 	 */
 	get id() {
@@ -277,6 +333,8 @@
 	}
 
 	/**
+	 * Updates the module id using the provided value.
+	 * @deprecated
 	 * @param {ModuleId} value value
 	 */
 	set id(value) {
@@ -292,6 +350,8 @@
 	}
 
 	/**
+	 * Returns the hash of the module.
+	 * @deprecated
 	 * @returns {string} the hash of the module
 	 */
 	get hash() {
@@ -303,6 +363,8 @@
 	}
 
 	/**
+	 * Returns the rendered hash of the module.
+	 * @deprecated
 	 * @returns {string} the shortened hash of the module
 	 */
 	get renderedHash() {
@@ -313,6 +375,10 @@
 		).getRenderedModuleHash(this, undefined);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {ModuleProfile | undefined} module profile
+	 */
 	get profile() {
 		return ModuleGraph.getModuleGraphForModule(
 			this,
@@ -321,6 +387,10 @@
 		).getProfile(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @param {ModuleProfile | undefined} value module profile
+	 */
 	set profile(value) {
 		ModuleGraph.getModuleGraphForModule(
 			this,
@@ -330,6 +400,8 @@
 	}
 
 	/**
+	 * Returns the pre-order index.
+	 * @deprecated
 	 * @returns {number | null} the pre order index
 	 */
 	get index() {
@@ -341,6 +413,8 @@
 	}
 
 	/**
+	 * Updates the pre-order index using the provided value.
+	 * @deprecated
 	 * @param {number} value the pre order index
 	 */
 	set index(value) {
@@ -352,6 +426,8 @@
 	}
 
 	/**
+	 * Returns the post-order index.
+	 * @deprecated
 	 * @returns {number | null} the post order index
 	 */
 	get index2() {
@@ -363,6 +439,8 @@
 	}
 
 	/**
+	 * Updates the post-order index using the provided value.
+	 * @deprecated
 	 * @param {number} value the post order index
 	 */
 	set index2(value) {
@@ -374,6 +452,8 @@
 	}
 
 	/**
+	 * Returns the depth.
+	 * @deprecated
 	 * @returns {number | null} the depth
 	 */
 	get depth() {
@@ -385,6 +465,8 @@
 	}
 
 	/**
+	 * Updates the depth using the provided value.
+	 * @deprecated
 	 * @param {number} value the depth
 	 */
 	set depth(value) {
@@ -396,6 +478,8 @@
 	}
 
 	/**
+	 * Returns the issuer.
+	 * @deprecated
 	 * @returns {Module | null | undefined} issuer
 	 */
 	get issuer() {
@@ -407,6 +491,8 @@
 	}
 
 	/**
+	 * Updates the issuer using the provided value.
+	 * @deprecated
 	 * @param {Module | null} value issuer
 	 */
 	set issuer(value) {
@@ -417,6 +503,10 @@
 		).setIssuer(this, value);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {boolean | SortableSet<string> | null} used exports
+	 */
 	get usedExports() {
 		return ModuleGraph.getModuleGraphForModule(
 			this,
@@ -426,6 +516,7 @@
 	}
 
 	/**
+	 * Gets optimization bailout.
 	 * @deprecated
 	 * @returns {OptimizationBailouts} list
 	 */
@@ -437,6 +528,10 @@
 		).getOptimizationBailout(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {boolean} true when optional, otherwise false
+	 */
 	get optional() {
 		return this.isOptional(
 			ModuleGraph.getModuleGraphForModule(
@@ -448,6 +543,8 @@
 	}
 
 	/**
+	 * Adds the provided chunk to the module.
+	 * @deprecated
 	 * @param {Chunk} chunk the chunk
 	 * @returns {boolean} true, when the module was added
 	 */
@@ -463,6 +560,8 @@
 	}
 
 	/**
+	 * Removes the provided chunk from the module.
+	 * @deprecated
 	 * @param {Chunk} chunk the chunk
 	 * @returns {void}
 	 */
@@ -475,6 +574,8 @@
 	}
 
 	/**
+	 * Checks whether this module is in the provided chunk.
+	 * @deprecated
 	 * @param {Chunk} chunk the chunk
 	 * @returns {boolean} true, when the module is in the chunk
 	 */
@@ -486,6 +587,10 @@
 		).isModuleInChunk(this, chunk);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {boolean} true when is entry module, otherwise false
+	 */
 	isEntryModule() {
 		return ChunkGraph.getChunkGraphForModule(
 			this,
@@ -494,6 +599,10 @@
 		).isEntryModule(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {Chunk[]} chunks
+	 */
 	getChunks() {
 		return ChunkGraph.getChunkGraphForModule(
 			this,
@@ -502,6 +611,10 @@
 		).getModuleChunks(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {number} number of chunks
+	 */
 	getNumberOfChunks() {
 		return ChunkGraph.getChunkGraphForModule(
 			this,
@@ -510,6 +623,10 @@
 		).getNumberOfModuleChunks(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {Iterable<Chunk>} chunks
+	 */
 	get chunksIterable() {
 		return ChunkGraph.getChunkGraphForModule(
 			this,
@@ -519,6 +636,8 @@
 	}
 
 	/**
+	 * Checks whether this module provides the specified export.
+	 * @deprecated
 	 * @param {string} exportName a name of an export
 	 * @returns {boolean | null} true, if the export is provided why the module.
 	 * null, if it's unknown.
@@ -534,6 +653,7 @@
 	// BACKWARD-COMPAT END
 
 	/**
+	 * Gets exports argument.
 	 * @returns {string} name of the exports argument
 	 */
 	get exportsArgument() {
@@ -541,6 +661,7 @@
 	}
 
 	/**
+	 * Gets module argument.
 	 * @returns {string} name of the module argument
 	 */
 	get moduleArgument() {
@@ -548,6 +669,7 @@
 	}
 
 	/**
+	 * Returns export type.
 	 * @param {ModuleGraph} moduleGraph the module graph
 	 * @param {boolean | undefined} strict the importing module is strict
 	 * @returns {ExportsType} export type
@@ -618,6 +740,7 @@
 	}
 
 	/**
+	 * Adds presentational dependency.
 	 * @param {Dependency} presentationalDependency dependency being tied to module.
 	 * This is a Dependency without edge in the module graph. It's only for presentation.
 	 * @returns {void}
@@ -630,6 +753,7 @@
 	}
 
 	/**
+	 * Adds code generation dependency.
 	 * @param {Dependency} codeGenerationDependency dependency being tied to module.
 	 * This is a Dependency where the code generation result of the referenced module is needed during code generation.
 	 * The Dependency should also be added to normal dependencies via addDependency.
@@ -643,7 +767,7 @@
 	}
 
 	/**
-	 * Removes all dependencies and blocks
+	 * Clear dependencies and blocks.
 	 * @returns {void}
 	 */
 	clearDependenciesAndBlocks() {
@@ -657,6 +781,7 @@
 	}
 
 	/**
+	 * Adds the provided warning to the module.
 	 * @param {WebpackError} warning the warning
 	 * @returns {void}
 	 */
@@ -668,6 +793,7 @@
 	}
 
 	/**
+	 * Returns list of warnings if any.
 	 * @returns {Iterable<WebpackError> | undefined} list of warnings if any
 	 */
 	getWarnings() {
@@ -675,6 +801,7 @@
 	}
 
 	/**
+	 * Gets number of warnings.
 	 * @returns {number} number of warnings
 	 */
 	getNumberOfWarnings() {
@@ -682,6 +809,7 @@
 	}
 
 	/**
+	 * Adds the provided error to the module.
 	 * @param {WebpackError} error the error
 	 * @returns {void}
 	 */
@@ -693,6 +821,7 @@
 	}
 
 	/**
+	 * Returns list of errors if any.
 	 * @returns {Iterable<WebpackError> | undefined} list of errors if any
 	 */
 	getErrors() {
@@ -700,6 +829,7 @@
 	}
 
 	/**
+	 * Gets number of errors.
 	 * @returns {number} number of errors
 	 */
 	getNumberOfErrors() {
@@ -720,6 +850,7 @@
 	}
 
 	/**
+	 * Checks whether this module is optional.
 	 * @param {ModuleGraph} moduleGraph the module graph
 	 * @returns {boolean} true, if the module is optional
 	 */
@@ -739,6 +870,7 @@
 	}
 
 	/**
+	 * Checks whether this module is accessible in chunk.
 	 * @param {ChunkGraph} chunkGraph the chunk graph
 	 * @param {Chunk} chunk a chunk
 	 * @param {Chunk=} ignoreChunk chunk to be ignored
@@ -753,6 +885,7 @@
 	}
 
 	/**
+	 * Checks whether this module is accessible in chunk group.
 	 * @param {ChunkGraph} chunkGraph the chunk graph
 	 * @param {ChunkGroup} chunkGroup a chunk group
 	 * @param {Chunk=} ignoreChunk chunk to be ignored
@@ -780,6 +913,7 @@
 	}
 
 	/**
+	 * Checks whether this module contains the chunk.
 	 * @param {Chunk} chunk a chunk
 	 * @param {ModuleGraph} moduleGraph the module graph
 	 * @param {ChunkGraph} chunkGraph the chunk graph
@@ -805,6 +939,7 @@
 	}
 
 	/**
+	 * Checks whether this module contains the module graph.
 	 * @param {ModuleGraph} moduleGraph the module graph
 	 * @param {RuntimeSpec} runtime the runtime
 	 * @returns {boolean} true if at least one other module depends on this module
@@ -817,6 +952,7 @@
 	}
 
 	/**
+	 * Returns a string representation.
 	 * @returns {string} for debugging
 	 */
 	toString() {
@@ -824,6 +960,7 @@
 	}
 
 	/**
+	 * Checks whether the module needs to be rebuilt for the current build state.
 	 * @param {NeedBuildContext} context context info
 	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
 	 * @returns {void}
@@ -838,9 +975,10 @@
 	}
 
 	/**
+	 * Checks whether it needs rebuild.
 	 * @deprecated Use needBuild instead
-	 * @param {Map<string, number|null>} fileTimestamps timestamps of files
-	 * @param {Map<string, number|null>} contextTimestamps timestamps of directories
+	 * @param {Map<string, number | null>} fileTimestamps timestamps of files
+	 * @param {Map<string, number | null>} contextTimestamps timestamps of directories
 	 * @returns {boolean} true, if the module needs a rebuild
 	 */
 	needRebuild(fileTimestamps, contextTimestamps) {
@@ -848,6 +986,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}
@@ -874,6 +1013,7 @@
 	}
 
 	/**
+	 * Invalidates the cached state associated with this value.
 	 * @returns {void}
 	 */
 	invalidateBuild() {
@@ -882,6 +1022,7 @@
 
 	/* istanbul ignore next */
 	/**
+	 * Returns the unique identifier used to reference this module.
 	 * @abstract
 	 * @returns {string} a unique identifier of the module
 	 */
@@ -893,6 +1034,7 @@
 
 	/* istanbul ignore next */
 	/**
+	 * Returns a human-readable identifier for this module.
 	 * @abstract
 	 * @param {RequestShortener} requestShortener the request shortener
 	 * @returns {string} a user readable identifier of the module
@@ -905,6 +1047,7 @@
 
 	/* istanbul ignore next */
 	/**
+	 * Builds the module using the provided compilation context.
 	 * @abstract
 	 * @param {WebpackOptions} options webpack options
 	 * @param {Compilation} compilation the compilation
@@ -920,6 +1063,7 @@
 	}
 
 	/**
+	 * Returns the source types this module can generate.
 	 * @abstract
 	 * @returns {SourceTypes} types available (do not mutate)
 	 */
@@ -928,18 +1072,32 @@
 		if (this.source === Module.prototype.source) {
 			return DEFAULT_TYPES_UNKNOWN;
 		}
-		return JS_TYPES;
+		return JAVASCRIPT_TYPES;
 	}
 
 	/**
+	 * Basic source types are high-level categories like javascript, css, webassembly, etc.
+	 * We only have built-in knowledge about the javascript basic type here; other basic types may be
+	 * added or changed over time by generators and do not need to be handled or detected here.
+	 *
+	 * Some modules, e.g. RemoteModule, may return non-basic source types like "remote" and "share-init"
+	 * from getSourceTypes(), but their generated output is still JavaScript, i.e. their basic type is JS.
+	 * @returns {BasicSourceTypes} types available (do not mutate)
+	 */
+	getSourceBasicTypes() {
+		return this.getSourceTypes();
+	}
+
+	/**
+	 * Returns generated source.
 	 * @abstract
 	 * @deprecated Use codeGeneration() instead
 	 * @param {DependencyTemplates} dependencyTemplates the dependency templates
 	 * @param {RuntimeTemplate} runtimeTemplate the runtime template
-	 * @param {string=} type the type of source that should be generated
+	 * @param {SourceType=} type the type of source that should be generated
 	 * @returns {Source} generated source
 	 */
-	source(dependencyTemplates, runtimeTemplate, type = "javascript") {
+	source(dependencyTemplates, runtimeTemplate, type = JAVASCRIPT_TYPE) {
 		if (this.codeGeneration === Module.prototype.codeGeneration) {
 			const AbstractMethodError = require("./AbstractMethodError");
 
@@ -957,6 +1115,7 @@
 			moduleGraph: chunkGraph.moduleGraph,
 			chunkGraph,
 			runtime: undefined,
+			runtimes: [],
 			codeGenerationResults: undefined
 		};
 		const sources = this.codeGeneration(codeGenContext).sources;
@@ -964,12 +1123,13 @@
 		return /** @type {Source} */ (
 			type
 				? sources.get(type)
-				: sources.get(/** @type {string} */ (first(this.getSourceTypes())))
+				: sources.get(/** @type {SourceType} */ (first(this.getSourceTypes())))
 		);
 	}
 
 	/* istanbul ignore next */
 	/**
+	 * Returns the estimated size for the requested source type.
 	 * @abstract
 	 * @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)
@@ -981,6 +1141,7 @@
 	}
 
 	/**
+	 * Gets the library identifier.
 	 * @param {LibIdentOptions} options options
 	 * @returns {LibIdent | null} an identifier for library inclusion
 	 */
@@ -989,6 +1150,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() {
@@ -996,6 +1158,7 @@
 	}
 
 	/**
+	 * Returns the reason this module cannot be concatenated, when one exists.
 	 * @param {ConcatenationBailoutReasonContext} context context
 	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
 	 */
@@ -1004,6 +1167,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
 	 */
@@ -1012,14 +1176,16 @@
 	}
 
 	/**
+	 * Generates code and runtime requirements for this module.
 	 * @param {CodeGenerationContext} context context for code generation
 	 * @returns {CodeGenerationResult} result
 	 */
 	codeGeneration(context) {
 		// Best override this method
+		/** @type {Sources} */
 		const sources = new Map();
 		for (const type of this.getSourceTypes()) {
-			if (type !== "unknown") {
+			if (type !== UNKNOWN_TYPE) {
 				sources.set(
 					type,
 					this.source(
@@ -1041,9 +1207,10 @@
 	}
 
 	/**
+	 * Returns true if the module can be placed in the chunk.
 	 * @param {Chunk} chunk the chunk which condition should be checked
 	 * @param {Compilation} compilation the compilation
-	 * @returns {boolean} true, if the chunk is ok for the module
+	 * @returns {boolean} true if the module can be placed in the chunk
 	 */
 	chunkCondition(chunk, compilation) {
 		return true;
@@ -1099,6 +1266,7 @@
 	}
 
 	/**
+	 * Gets the original source.
 	 * @returns {Source | null} the original source for the module before webpack transformation
 	 */
 	originalSource() {
@@ -1106,6 +1274,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
@@ -1119,6 +1288,7 @@
 	) {}
 
 	/**
+	 * Serializes this instance into the provided serializer context.
 	 * @param {ObjectSerializerContext} context context
 	 */
 	serialize(context) {
@@ -1149,6 +1319,7 @@
 	}
 
 	/**
+	 * Restores this instance from the provided deserializer context.
 	 * @param {ObjectDeserializerContext} context context
 	 */
 	deserialize(context) {
@@ -1169,6 +1340,22 @@
 		this.codeGenerationDependencies = read();
 		super.deserialize(context);
 	}
+
+	// TODO remove in webpack 6
+	/**
+	 * Gets source basic types.
+	 * @deprecated In webpack 6, call getSourceBasicTypes() directly on the module instance instead of using this static method.
+	 * @param {Module} module the module
+	 * @returns {ReturnType<Module["getSourceBasicTypes"]>} the source types of the module
+	 */
+	static getSourceBasicTypes(module) {
+		if (!(module instanceof Module)) {
+			// https://github.com/webpack/webpack/issues/20597
+			// fallback to javascript
+			return JAVASCRIPT_TYPES;
+		}
+		return module.getSourceBasicTypes();
+	}
 }
 
 makeSerializable(Module, "webpack/lib/Module");
@@ -1176,6 +1363,7 @@
 // TODO remove in webpack 6
 Object.defineProperty(Module.prototype, "hasEqualsChunks", {
 	/**
+	 * Gets has equals chunks.
 	 * @deprecated
 	 * @returns {EXPECTED_ANY} throw an error
 	 */
@@ -1189,6 +1377,7 @@
 // TODO remove in webpack 6
 Object.defineProperty(Module.prototype, "isUsed", {
 	/**
+	 * Returns throw an error.
 	 * @deprecated
 	 * @returns {EXPECTED_ANY} throw an error
 	 */
@@ -1202,11 +1391,13 @@
 // TODO remove in webpack 6
 Object.defineProperty(Module.prototype, "errors", {
 	/**
+	 * Returns errors.
 	 * @deprecated
 	 * @returns {WebpackError[]} errors
 	 */
 	get: util.deprecate(
 		/**
+		 * Returns errors.
 		 * @this {Module}
 		 * @returns {WebpackError[]} errors
 		 */
@@ -1224,11 +1415,13 @@
 // TODO remove in webpack 6
 Object.defineProperty(Module.prototype, "warnings", {
 	/**
+	 * Returns warnings.
 	 * @deprecated
 	 * @returns {WebpackError[]} warnings
 	 */
 	get: util.deprecate(
 		/**
+		 * Returns warnings.
 		 * @this {Module}
 		 * @returns {WebpackError[]} warnings
 		 */
@@ -1246,6 +1439,7 @@
 // TODO remove in webpack 6
 Object.defineProperty(Module.prototype, "used", {
 	/**
+	 * Returns throw an error.
 	 * @deprecated
 	 * @returns {EXPECTED_ANY} throw an error
 	 */
@@ -1255,6 +1449,7 @@
 		);
 	},
 	/**
+	 * Updates used using the provided value.
 	 * @param {EXPECTED_ANY} value value
 	 */
 	set(value) {

--
Gitblit v1.9.3