| | |
| | | const ConcatenationScope = require("../ConcatenationScope"); |
| | | const Generator = require("../Generator"); |
| | | const { |
| | | CSS_TYPE, |
| | | CSS_URL_TYPE, |
| | | CSS_URL_TYPES, |
| | | JS_AND_CSS_URL_TYPES, |
| | | JS_TYPES, |
| | | JAVASCRIPT_AND_CSS_URL_TYPES, |
| | | JAVASCRIPT_TYPE, |
| | | JAVASCRIPT_TYPES, |
| | | NO_TYPES |
| | | } = require("../ModuleSourceTypesConstants"); |
| | | } = require("../ModuleSourceTypeConstants"); |
| | | const RuntimeGlobals = require("../RuntimeGlobals"); |
| | | |
| | | /** @typedef {import("webpack-sources").Source} Source */ |
| | | /** @typedef {import("../Generator").GenerateContext} GenerateContext */ |
| | | /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */ |
| | | /** @typedef {import("../Module").SourceType} SourceType */ |
| | | /** @typedef {import("../Module").SourceTypes} SourceTypes */ |
| | | /** @typedef {import("../ModuleGraph")} ModuleGraph */ |
| | | /** @typedef {import("../NormalModule")} NormalModule */ |
| | | |
| | | class AssetSourceGenerator extends Generator { |
| | | /** |
| | | * Creates an instance of AssetSourceGenerator. |
| | | * @param {ModuleGraph} moduleGraph the module graph |
| | | */ |
| | | constructor(moduleGraph) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | const data = getData ? getData() : undefined; |
| | | |
| | | switch (type) { |
| | | case "javascript": { |
| | | case JAVASCRIPT_TYPE: { |
| | | if (!originalSource) { |
| | | return new RawSource(""); |
| | | } |
| | |
| | | runtimeRequirements.add(RuntimeGlobals.requireScope); |
| | | runtimeRequirements.add(RuntimeGlobals.toBinary); |
| | | |
| | | /** @type {string} */ |
| | | let sourceContent; |
| | | if (concatenationScope) { |
| | | concatenationScope.registerNamespaceExport( |
| | |
| | | } |
| | | return new RawSource(sourceContent); |
| | | } |
| | | case "css-url": { |
| | | case CSS_URL_TYPE: { |
| | | if (!originalSource) { |
| | | return null; |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * Generates fallback output for the provided error condition. |
| | | * @param {Error} error the error |
| | | * @param {NormalModule} module module for which the code should be generated |
| | | * @param {GenerateContext} generateContext context for generate |
| | |
| | | */ |
| | | generateError(error, module, generateContext) { |
| | | switch (generateContext.type) { |
| | | case "javascript": { |
| | | case JAVASCRIPT_TYPE: { |
| | | return new RawSource( |
| | | `throw new Error(${JSON.stringify(error.message)});` |
| | | ); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the source types available for this module. |
| | | * @param {NormalModule} module fresh module |
| | | * @returns {SourceTypes} available types (do not mutate) |
| | | */ |
| | |
| | | } |
| | | |
| | | if (sourceTypes.size > 0) { |
| | | if (sourceTypes.has("javascript") && sourceTypes.has("css")) { |
| | | return JS_AND_CSS_URL_TYPES; |
| | | } else if (sourceTypes.has("css")) { |
| | | if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) { |
| | | return JAVASCRIPT_AND_CSS_URL_TYPES; |
| | | } else if (sourceTypes.has(CSS_TYPE)) { |
| | | return CSS_URL_TYPES; |
| | | } |
| | | return JS_TYPES; |
| | | return JAVASCRIPT_TYPES; |
| | | } |
| | | |
| | | return NO_TYPES; |
| | | } |
| | | |
| | | /** |
| | | * 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) { |