AMDRequireArrayDependency.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const DependencyTemplate = require("../DependencyTemplate");
  7. const makeSerializable = require("../util/makeSerializable");
  8. const NullDependency = require("./NullDependency");
  9. /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
  10. /** @typedef {import("../Dependency")} Dependency */
  11. /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
  12. /** @typedef {import("../javascript/JavascriptParser").Range} Range */
  13. /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  14. /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  15. class AMDRequireArrayDependency extends NullDependency {
  16. /**
  17. * @param {TODO} depsArray deps array
  18. * @param {Range} range range
  19. */
  20. constructor(depsArray, range) {
  21. super();
  22. this.depsArray = depsArray;
  23. this.range = range;
  24. }
  25. get type() {
  26. return "amd require array";
  27. }
  28. get category() {
  29. return "amd";
  30. }
  31. /**
  32. * @param {ObjectSerializerContext} context context
  33. */
  34. serialize(context) {
  35. const { write } = context;
  36. write(this.depsArray);
  37. write(this.range);
  38. super.serialize(context);
  39. }
  40. /**
  41. * @param {ObjectDeserializerContext} context context
  42. */
  43. deserialize(context) {
  44. const { read } = context;
  45. this.depsArray = read();
  46. this.range = read();
  47. super.deserialize(context);
  48. }
  49. }
  50. makeSerializable(
  51. AMDRequireArrayDependency,
  52. "webpack/lib/dependencies/AMDRequireArrayDependency"
  53. );
  54. AMDRequireArrayDependency.Template = class AMDRequireArrayDependencyTemplate extends (
  55. DependencyTemplate
  56. ) {
  57. /**
  58. * @param {Dependency} dependency the dependency for which the template should be applied
  59. * @param {ReplaceSource} source the current replace source which can be modified
  60. * @param {DependencyTemplateContext} templateContext the context object
  61. * @returns {void}
  62. */
  63. apply(dependency, source, templateContext) {
  64. const dep = /** @type {AMDRequireArrayDependency} */ (dependency);
  65. const content = this.getContent(dep, templateContext);
  66. source.replace(dep.range[0], dep.range[1] - 1, content);
  67. }
  68. getContent(dep, templateContext) {
  69. const requires = dep.depsArray.map(dependency => {
  70. return this.contentForDependency(dependency, templateContext);
  71. });
  72. return `[${requires.join(", ")}]`;
  73. }
  74. contentForDependency(
  75. dep,
  76. { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements }
  77. ) {
  78. if (typeof dep === "string") {
  79. return dep;
  80. }
  81. if (dep.localModule) {
  82. return dep.localModule.variableName();
  83. } else {
  84. return runtimeTemplate.moduleExports({
  85. module: moduleGraph.getModule(dep),
  86. chunkGraph,
  87. request: dep.request,
  88. runtimeRequirements
  89. });
  90. }
  91. }
  92. };
  93. module.exports = AMDRequireArrayDependency;