AssetsOverSizeLimitWarning.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Sean Larkin @thelarkinn
  4. */
  5. "use strict";
  6. const WebpackError = require("../errors/WebpackError");
  7. const formatSize = require("../util/formatSize");
  8. /** @import { AssetDetails } from "./SizeLimitsPlugin" */
  9. class AssetsOverSizeLimitWarning extends WebpackError {
  10. /**
  11. * Creates an instance of AssetsOverSizeLimitWarning.
  12. * @param {AssetDetails[]} assetsOverSizeLimit the assets
  13. * @param {number} assetLimit the size limit
  14. */
  15. constructor(assetsOverSizeLimit, assetLimit) {
  16. const assetLists = assetsOverSizeLimit
  17. .map((asset) => {
  18. const largest = asset.modules
  19. ? `\n Largest modules: ${asset.modules
  20. .map((module) => `${module.name} (${formatSize(module.size)})`)
  21. .join(", ")}`
  22. : "";
  23. return `\n ${asset.name} (${formatSize(asset.size)})${largest}`;
  24. })
  25. .join("");
  26. super(`asset size limit: The following asset(s) exceed the recommended size limit (${formatSize(
  27. assetLimit
  28. )}).
  29. This can impact web performance.
  30. Assets: ${assetLists}`);
  31. /** @type {string} */
  32. this.name = "AssetsOverSizeLimitWarning";
  33. /** @type {AssetDetails[]} */
  34. this.assets = assetsOverSizeLimit;
  35. }
  36. }
  37. /** @type {typeof AssetsOverSizeLimitWarning} */
  38. module.exports = AssetsOverSizeLimitWarning;