CssExportDependency.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Ivan Kopeykin @vankop
  4. */
  5. "use strict";
  6. const makeSerializable = require("../util/makeSerializable");
  7. const NullDependency = require("./NullDependency");
  8. /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
  9. /** @typedef {import("../Dependency")} Dependency */
  10. /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
  11. /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
  12. /** @typedef {import("../ModuleGraph")} ModuleGraph */
  13. /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  14. /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  15. class CssExportDependency extends NullDependency {
  16. /**
  17. * @param {string} name name
  18. * @param {string} value value
  19. */
  20. constructor(name, value) {
  21. super();
  22. this.name = name;
  23. this.value = value;
  24. }
  25. get type() {
  26. return "css :export";
  27. }
  28. /**
  29. * Returns the exported names
  30. * @param {ModuleGraph} moduleGraph module graph
  31. * @returns {ExportsSpec | undefined} export names
  32. */
  33. getExports(moduleGraph) {
  34. const name = this.name;
  35. return {
  36. exports: [
  37. {
  38. name,
  39. canMangle: true
  40. }
  41. ],
  42. dependencies: undefined
  43. };
  44. }
  45. /**
  46. * @param {ObjectSerializerContext} context context
  47. */
  48. serialize(context) {
  49. const { write } = context;
  50. write(this.name);
  51. write(this.value);
  52. super.serialize(context);
  53. }
  54. /**
  55. * @param {ObjectDeserializerContext} context context
  56. */
  57. deserialize(context) {
  58. const { read } = context;
  59. this.name = read();
  60. this.value = read();
  61. super.deserialize(context);
  62. }
  63. }
  64. CssExportDependency.Template = class CssExportDependencyTemplate extends (
  65. NullDependency.Template
  66. ) {
  67. /**
  68. * @param {Dependency} dependency the dependency for which the template should be applied
  69. * @param {ReplaceSource} source the current replace source which can be modified
  70. * @param {DependencyTemplateContext} templateContext the context object
  71. * @returns {void}
  72. */
  73. apply(dependency, source, { cssExports }) {
  74. const dep = /** @type {CssExportDependency} */ (dependency);
  75. cssExports.set(dep.name, dep.value);
  76. }
  77. };
  78. makeSerializable(
  79. CssExportDependency,
  80. "webpack/lib/dependencies/CssExportDependency"
  81. );
  82. module.exports = CssExportDependency;