CssMergeStyleSheetsRuntimeModule.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Natsu @xiaoxiaojx
  4. */
  5. "use strict";
  6. const RuntimeGlobals = require("../RuntimeGlobals");
  7. const RuntimeModule = require("../RuntimeModule");
  8. const Template = require("../Template");
  9. /** @typedef {import("../Chunk")} Chunk */
  10. class CssMergeStyleSheetsRuntimeModule extends RuntimeModule {
  11. constructor() {
  12. super("css merge stylesheets");
  13. }
  14. /**
  15. * Generates runtime code for this runtime module.
  16. * @returns {string | null} runtime code
  17. */
  18. generate() {
  19. const { runtimeTemplate } = /** @type {import("../Compilation")} */ (
  20. this.compilation
  21. );
  22. return Template.asString([
  23. `${RuntimeGlobals.cssMergeStyleSheets} = ${runtimeTemplate.basicFunction(
  24. "sheets",
  25. [
  26. "var sheetsArray = Array.isArray(sheets) ? sheets : [sheets];",
  27. "var cssTexts = [];",
  28. "for (var i = 0; i < sheetsArray.length; i++) {",
  29. Template.indent([
  30. "var s = sheetsArray[i];",
  31. "if (!s) continue;",
  32. "if (typeof s === 'string') {",
  33. Template.indent("cssTexts.push(s);"),
  34. "} else if (s.cssRules) {",
  35. Template.indent([
  36. "var rules = s.cssRules;",
  37. "for (var j = 0; j < rules.length; j++) {",
  38. Template.indent("cssTexts.push(rules[j].cssText);"),
  39. "}"
  40. ]),
  41. "}"
  42. ]),
  43. "}",
  44. "return cssTexts.join('');"
  45. ]
  46. )};`
  47. ]);
  48. }
  49. }
  50. module.exports = CssMergeStyleSheetsRuntimeModule;