| | |
| | | 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"); |
| | |
| | | /** @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 |
| | | */ |
| | |
| | | /** @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 |
| | |
| | | * @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 |
| | |
| | | */ |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | /** @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 |
| | |
| | | * @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 |
| | |
| | | * @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 |
| | | */ |
| | |
| | | /** @typedef {Map<string, ValueCacheVersion>} ValueCacheVersions */ |
| | | |
| | | /** |
| | | * Defines the need build context type used by this module. |
| | | * @typedef {object} NeedBuildContext |
| | | * @property {Compilation} compilation |
| | | * @property {FileSystemInfo} fileSystemInfo |
| | |
| | | /** @typedef {KnownBuildInfo & Record<string, EXPECTED_ANY>} BuildInfo */ |
| | | |
| | | /** |
| | | * Defines the factory meta type used by this module. |
| | | * @typedef {object} FactoryMeta |
| | | * @property {boolean=} sideEffectFree |
| | | */ |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | 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 |
| | |
| | | // 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() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the module id using the provided value. |
| | | * @deprecated |
| | | * @param {ModuleId} value value |
| | | */ |
| | | set id(value) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the hash of the module. |
| | | * @deprecated |
| | | * @returns {string} the hash of the module |
| | | */ |
| | | get hash() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the rendered hash of the module. |
| | | * @deprecated |
| | | * @returns {string} the shortened hash of the module |
| | | */ |
| | | get renderedHash() { |
| | |
| | | ).getRenderedModuleHash(this, undefined); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {ModuleProfile | undefined} module profile |
| | | */ |
| | | get profile() { |
| | | return ModuleGraph.getModuleGraphForModule( |
| | | this, |
| | |
| | | ).getProfile(this); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @param {ModuleProfile | undefined} value module profile |
| | | */ |
| | | set profile(value) { |
| | | ModuleGraph.getModuleGraphForModule( |
| | | this, |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the pre-order index. |
| | | * @deprecated |
| | | * @returns {number | null} the pre order index |
| | | */ |
| | | get index() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the pre-order index using the provided value. |
| | | * @deprecated |
| | | * @param {number} value the pre order index |
| | | */ |
| | | set index(value) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the post-order index. |
| | | * @deprecated |
| | | * @returns {number | null} the post order index |
| | | */ |
| | | get index2() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the post-order index using the provided value. |
| | | * @deprecated |
| | | * @param {number} value the post order index |
| | | */ |
| | | set index2(value) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the depth. |
| | | * @deprecated |
| | | * @returns {number | null} the depth |
| | | */ |
| | | get depth() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the depth using the provided value. |
| | | * @deprecated |
| | | * @param {number} value the depth |
| | | */ |
| | | set depth(value) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the issuer. |
| | | * @deprecated |
| | | * @returns {Module | null | undefined} issuer |
| | | */ |
| | | get issuer() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the issuer using the provided value. |
| | | * @deprecated |
| | | * @param {Module | null} value issuer |
| | | */ |
| | | set issuer(value) { |
| | |
| | | ).setIssuer(this, value); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {boolean | SortableSet<string> | null} used exports |
| | | */ |
| | | get usedExports() { |
| | | return ModuleGraph.getModuleGraphForModule( |
| | | this, |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets optimization bailout. |
| | | * @deprecated |
| | | * @returns {OptimizationBailouts} list |
| | | */ |
| | |
| | | ).getOptimizationBailout(this); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {boolean} true when optional, otherwise false |
| | | */ |
| | | get optional() { |
| | | return this.isOptional( |
| | | ModuleGraph.getModuleGraphForModule( |
| | |
| | | } |
| | | |
| | | /** |
| | | * Adds the provided chunk to the module. |
| | | * @deprecated |
| | | * @param {Chunk} chunk the chunk |
| | | * @returns {boolean} true, when the module was added |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Removes the provided chunk from the module. |
| | | * @deprecated |
| | | * @param {Chunk} chunk the chunk |
| | | * @returns {void} |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | |
| | | ).isModuleInChunk(this, chunk); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {boolean} true when is entry module, otherwise false |
| | | */ |
| | | isEntryModule() { |
| | | return ChunkGraph.getChunkGraphForModule( |
| | | this, |
| | |
| | | ).isEntryModule(this); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {Chunk[]} chunks |
| | | */ |
| | | getChunks() { |
| | | return ChunkGraph.getChunkGraphForModule( |
| | | this, |
| | |
| | | ).getModuleChunks(this); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {number} number of chunks |
| | | */ |
| | | getNumberOfChunks() { |
| | | return ChunkGraph.getChunkGraphForModule( |
| | | this, |
| | |
| | | ).getNumberOfModuleChunks(this); |
| | | } |
| | | |
| | | /** |
| | | * @deprecated |
| | | * @returns {Iterable<Chunk>} chunks |
| | | */ |
| | | get chunksIterable() { |
| | | return ChunkGraph.getChunkGraphForModule( |
| | | this, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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. |
| | |
| | | // BACKWARD-COMPAT END |
| | | |
| | | /** |
| | | * Gets exports argument. |
| | | * @returns {string} name of the exports argument |
| | | */ |
| | | get exportsArgument() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets module argument. |
| | | * @returns {string} name of the module argument |
| | | */ |
| | | get moduleArgument() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns export type. |
| | | * @param {ModuleGraph} moduleGraph the module graph |
| | | * @param {boolean | undefined} strict the importing module is strict |
| | | * @returns {ExportsType} export type |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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} |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Removes all dependencies and blocks |
| | | * Clear dependencies and blocks. |
| | | * @returns {void} |
| | | */ |
| | | clearDependenciesAndBlocks() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Adds the provided warning to the module. |
| | | * @param {WebpackError} warning the warning |
| | | * @returns {void} |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns list of warnings if any. |
| | | * @returns {Iterable<WebpackError> | undefined} list of warnings if any |
| | | */ |
| | | getWarnings() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets number of warnings. |
| | | * @returns {number} number of warnings |
| | | */ |
| | | getNumberOfWarnings() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Adds the provided error to the module. |
| | | * @param {WebpackError} error the error |
| | | * @returns {void} |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns list of errors if any. |
| | | * @returns {Iterable<WebpackError> | undefined} list of errors if any |
| | | */ |
| | | getErrors() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets number of errors. |
| | | * @returns {number} number of errors |
| | | */ |
| | | getNumberOfErrors() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Checks whether this module is optional. |
| | | * @param {ModuleGraph} moduleGraph the module graph |
| | | * @returns {boolean} true, if the module is optional |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | } |
| | | |
| | | /** |
| | | * Checks whether this module contains the chunk. |
| | | * @param {Chunk} chunk a chunk |
| | | * @param {ModuleGraph} moduleGraph the module graph |
| | | * @param {ChunkGraph} chunkGraph the chunk graph |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns a string representation. |
| | | * @returns {string} for debugging |
| | | */ |
| | | toString() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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} |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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} |
| | |
| | | } |
| | | |
| | | /** |
| | | * Invalidates the cached state associated with this value. |
| | | * @returns {void} |
| | | */ |
| | | invalidateBuild() { |
| | |
| | | |
| | | /* istanbul ignore next */ |
| | | /** |
| | | * Returns the unique identifier used to reference this module. |
| | | * @abstract |
| | | * @returns {string} a unique identifier of the module |
| | | */ |
| | |
| | | |
| | | /* 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 |
| | |
| | | |
| | | /* istanbul ignore next */ |
| | | /** |
| | | * Builds the module using the provided compilation context. |
| | | * @abstract |
| | | * @param {WebpackOptions} options webpack options |
| | | * @param {Compilation} compilation the compilation |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the source types this module can generate. |
| | | * @abstract |
| | | * @returns {SourceTypes} types available (do not mutate) |
| | | */ |
| | |
| | | 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"); |
| | | |
| | |
| | | moduleGraph: chunkGraph.moduleGraph, |
| | | chunkGraph, |
| | | runtime: undefined, |
| | | runtimes: [], |
| | | codeGenerationResults: undefined |
| | | }; |
| | | const sources = this.codeGeneration(codeGenContext).sources; |
| | |
| | | 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) |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets the library identifier. |
| | | * @param {LibIdentOptions} options options |
| | | * @returns {LibIdent | null} an identifier for library inclusion |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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( |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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; |
| | |
| | | } |
| | | |
| | | /** |
| | | * Gets the original source. |
| | | * @returns {Source | null} the original source for the module before webpack transformation |
| | | */ |
| | | originalSource() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | ) {} |
| | | |
| | | /** |
| | | * Serializes this instance into the provided serializer context. |
| | | * @param {ObjectSerializerContext} context context |
| | | */ |
| | | serialize(context) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Restores this instance from the provided deserializer context. |
| | | * @param {ObjectDeserializerContext} context context |
| | | */ |
| | | deserialize(context) { |
| | |
| | | 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"); |
| | |
| | | // TODO remove in webpack 6 |
| | | Object.defineProperty(Module.prototype, "hasEqualsChunks", { |
| | | /** |
| | | * Gets has equals chunks. |
| | | * @deprecated |
| | | * @returns {EXPECTED_ANY} throw an error |
| | | */ |
| | |
| | | // TODO remove in webpack 6 |
| | | Object.defineProperty(Module.prototype, "isUsed", { |
| | | /** |
| | | * Returns throw an error. |
| | | * @deprecated |
| | | * @returns {EXPECTED_ANY} throw an error |
| | | */ |
| | |
| | | // 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 |
| | | */ |
| | |
| | | // 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 |
| | | */ |
| | |
| | | // TODO remove in webpack 6 |
| | | Object.defineProperty(Module.prototype, "used", { |
| | | /** |
| | | * Returns throw an error. |
| | | * @deprecated |
| | | * @returns {EXPECTED_ANY} throw an error |
| | | */ |
| | |
| | | ); |
| | | }, |
| | | /** |
| | | * Updates used using the provided value. |
| | | * @param {EXPECTED_ANY} value value |
| | | */ |
| | | set(value) { |