/* MIT License http://www.opensource.org/licenses/mit-license.php Author Sergey Melyukov @smelukov */ "use strict"; const { RawSource } = require("webpack-sources"); const Generator = require("../Generator"); const RuntimeGlobals = require("../RuntimeGlobals"); /** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("../Generator").GenerateContext} GenerateContext */ /** @typedef {import("../NormalModule")} NormalModule */ const TYPES = new Set(["javascript"]); class AssetSourceGenerator extends Generator { /** * @param {NormalModule} module module for which the code should be generated * @param {GenerateContext} generateContext context for generate * @returns {Source} generated code */ generate(module, { chunkGraph, runtimeTemplate, runtimeRequirements }) { runtimeRequirements.add(RuntimeGlobals.module); const originalSource = module.originalSource(); if (!originalSource) { return new RawSource(""); } const content = originalSource.source(); let encodedSource; if (typeof content === "string") { encodedSource = content; } else { encodedSource = content.toString("utf-8"); } return new RawSource( `${RuntimeGlobals.module}.exports = ${JSON.stringify(encodedSource)};` ); } /** * @param {NormalModule} module fresh module * @returns {Set} available types (do not mutate) */ getTypes(module) { return TYPES; } /** * @param {NormalModule} module the module * @param {string=} type source type * @returns {number} estimate size of the module */ getSize(module, type) { const originalSource = module.originalSource(); if (!originalSource) { return 0; } // Example: m.exports="abcd" return originalSource.size() + 12; } } module.exports = AssetSourceGenerator;