ContextDependencyTemplateAsRequireCall.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const ContextDependency = require("./ContextDependency");
  7. /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
  8. /** @typedef {import("../javascript/JavascriptParser").Range} Range */
  9. /** @typedef {import("../Dependency")} Dependency */
  10. /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
  11. class ContextDependencyTemplateAsRequireCall
  12. extends ContextDependency.Template
  13. {
  14. /**
  15. * Applies the plugin by registering its hooks on the compiler.
  16. * @param {Dependency} dependency the dependency for which the template should be applied
  17. * @param {ReplaceSource} source the current replace source which can be modified
  18. * @param {DependencyTemplateContext} templateContext the context object
  19. * @returns {void}
  20. */
  21. apply(
  22. dependency,
  23. source,
  24. { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements }
  25. ) {
  26. const dep = /** @type {ContextDependency} */ (dependency);
  27. let moduleExports = runtimeTemplate.moduleExports({
  28. module: moduleGraph.getModule(dep),
  29. chunkGraph,
  30. request: /** @type {string} */ (dep.request),
  31. runtimeRequirements
  32. });
  33. if (dep.inShorthand) {
  34. moduleExports = `${dep.inShorthand}: ${moduleExports}`;
  35. }
  36. const range = /** @type {Range} */ (dep.range);
  37. if (moduleGraph.getModule(dep)) {
  38. if (dep.valueRange) {
  39. if (Array.isArray(dep.replaces)) {
  40. for (let i = 0; i < dep.replaces.length; i++) {
  41. const rep = dep.replaces[i];
  42. source.replace(rep.range[0], rep.range[1] - 1, rep.value);
  43. }
  44. }
  45. source.replace(dep.valueRange[1], range[1] - 1, ")");
  46. source.replace(range[0], dep.valueRange[0] - 1, `${moduleExports}(`);
  47. } else {
  48. source.replace(range[0], range[1] - 1, moduleExports);
  49. }
  50. } else {
  51. source.replace(range[0], range[1] - 1, moduleExports);
  52. }
  53. }
  54. }
  55. module.exports = ContextDependencyTemplateAsRequireCall;