AssetModule.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. */
  4. "use strict";
  5. const NormalModule = require("../NormalModule");
  6. const makeSerializable = require("../util/makeSerializable");
  7. /** @import { AssetInfo } from "../Compilation" */
  8. /**
  9. * @import {
  10. * NormalModuleBuildInfo,
  11. * NormalModuleCreateData
  12. * } from "../NormalModule"
  13. */
  14. /**
  15. * Defines the build info properties specific to asset modules.
  16. * @typedef {object} KnownAssetModuleBuildInfo
  17. * @property {boolean=} dataUrl whether the asset is inlined as a data url
  18. * @property {string=} filename
  19. * @property {AssetInfo=} assetInfo
  20. * @property {string=} fullContentHash
  21. */
  22. /** @typedef {NormalModuleBuildInfo & KnownAssetModuleBuildInfo} AssetModuleBuildInfo */
  23. /**
  24. * Module class for all `asset/*` modules. Asset-specific properties should live here instead of `NormalModule`.
  25. */
  26. class AssetModule extends NormalModule {
  27. /**
  28. * @param {NormalModuleCreateData} options options object
  29. * @param {boolean=} sideEffectFree whether asset modules are side-effect-free (`AssetModulesPluginOptions`)
  30. */
  31. constructor(options, sideEffectFree) {
  32. super(options);
  33. // Redeclared with the asset specific shape
  34. /** @type {AssetModuleBuildInfo | undefined} */
  35. this.buildInfo = undefined;
  36. if (sideEffectFree) {
  37. this.factoryMeta = { sideEffectFree: true };
  38. }
  39. }
  40. }
  41. makeSerializable(AssetModule, "webpack/lib/asset/AssetModule");
  42. module.exports = AssetModule;