| | |
| | | |
| | | "use strict"; |
| | | |
| | | const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants"); |
| | | |
| | | /** @typedef {import("webpack-sources").Source} Source */ |
| | | /** @typedef {import("./ChunkGraph")} ChunkGraph */ |
| | | /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */ |
| | |
| | | /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */ |
| | | /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */ |
| | | /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */ |
| | | /** @typedef {import("./Module").SourceType} SourceType */ |
| | | /** @typedef {import("./Module").SourceTypes} SourceTypes */ |
| | | /** @typedef {import("./ModuleGraph")} ModuleGraph */ |
| | | /** @typedef {import("./NormalModule")} NormalModule */ |
| | |
| | | /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */ |
| | | |
| | | /** |
| | | * Defines the generate context type used by this module. |
| | | * @typedef {object} GenerateContext |
| | | * @property {DependencyTemplates} dependencyTemplates mapping from dependencies to templates |
| | | * @property {RuntimeTemplate} runtimeTemplate the runtime template |
| | |
| | | * @property {RuntimeSpec} runtime the runtime |
| | | * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules |
| | | * @property {CodeGenerationResults=} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that) |
| | | * @property {string} type which kind of code should be generated |
| | | * @property {SourceType} type which kind of code should be generated |
| | | * @property {() => CodeGenerationResultData=} getData get access to the code generation data |
| | | */ |
| | | |
| | | /** |
| | | * Defines the generate error fn callback. |
| | | * @callback GenerateErrorFn |
| | | * @param {Error} error the error |
| | | * @param {NormalModule} module module for which the code should be generated |
| | |
| | | */ |
| | | |
| | | /** |
| | | * Represents the generator runtime component. |
| | | * @typedef {object} UpdateHashContext |
| | | * @property {NormalModule} module the module |
| | | * @property {ChunkGraph} chunkGraph |
| | |
| | | |
| | | class Generator { |
| | | /** |
| | | * @param {Record<string, Generator>} map map of types |
| | | * Returns generator by type. |
| | | * @param {{ [key in SourceType]?: Generator }} map map of types |
| | | * @returns {ByTypeGenerator} generator by type |
| | | */ |
| | | static byType(map) { |
| | |
| | | |
| | | /* istanbul ignore next */ |
| | | /** |
| | | * Returns the source types available for this module. |
| | | * @abstract |
| | | * @param {NormalModule} module fresh module |
| | | * @returns {SourceTypes} available types (do not mutate) |
| | |
| | | |
| | | /* istanbul ignore next */ |
| | | /** |
| | | * Returns the estimated size for the requested source type. |
| | | * @abstract |
| | | * @param {NormalModule} module the module |
| | | * @param {string=} type source type |
| | | * @param {SourceType=} type source type |
| | | * @returns {number} estimate size of the module |
| | | */ |
| | | getSize(module, type) { |
| | |
| | | |
| | | /* istanbul ignore next */ |
| | | /** |
| | | * Generates generated code for this runtime module. |
| | | * @abstract |
| | | * @param {NormalModule} module module for which the code should be generated |
| | | * @param {GenerateContext} generateContext context for generate |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the reason this module cannot be concatenated, when one exists. |
| | | * @param {NormalModule} module module for which the bailout reason should be determined |
| | | * @param {ConcatenationBailoutReasonContext} context context |
| | | * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated |
| | |
| | | } |
| | | |
| | | /** |
| | | * Updates the hash with the data contributed by this instance. |
| | | * @param {Hash} hash hash that will be modified |
| | | * @param {UpdateHashContext} updateHashContext context for updating hash |
| | | */ |
| | |
| | | |
| | | class ByTypeGenerator extends Generator { |
| | | /** |
| | | * @param {Record<string, Generator>} map map of types |
| | | * Creates an instance of ByTypeGenerator. |
| | | * @param {{ [key in SourceType]?: Generator }} map map of types |
| | | */ |
| | | constructor(map) { |
| | | super(); |
| | | this.map = map; |
| | | this._types = new Set(Object.keys(map)); |
| | | this._types = /** @type {SourceTypes} */ (new Set(Object.keys(map))); |
| | | /** @type {GenerateErrorFn | undefined} */ |
| | | this.generateError = generateError.bind(this); |
| | | } |
| | | |
| | | /** |
| | | * Returns the source types available for this module. |
| | | * @param {NormalModule} module fresh module |
| | | * @returns {SourceTypes} available types (do not mutate) |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the estimated size for the requested source type. |
| | | * @param {NormalModule} module the module |
| | | * @param {string=} type source type |
| | | * @param {SourceType=} type source type |
| | | * @returns {number} estimate size of the module |
| | | */ |
| | | getSize(module, type = "javascript") { |
| | | getSize(module, type = JAVASCRIPT_TYPE) { |
| | | const t = type; |
| | | const generator = this.map[t]; |
| | | return generator ? generator.getSize(module, t) : 0; |
| | | } |
| | | |
| | | /** |
| | | * Generates generated code for this runtime module. |
| | | * @param {NormalModule} module module for which the code should be generated |
| | | * @param {GenerateContext} generateContext context for generate |
| | | * @returns {Source | null} generated code |