AMDRequireArrayDependency.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 LocalModuleDependency = require("./LocalModuleDependency");
  9. const NullDependency = require("./NullDependency");
  10. /** @import { ReplaceSource } from "webpack-sources" */
  11. /** @import Dependency from "../Dependency" */
  12. /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
  13. /** @import { Range } from "../javascript/JavascriptParser" */
  14. /** @import AMDRequireItemDependency from "./AMDRequireItemDependency" */
  15. /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[(string | LocalModuleDependency | AMDRequireItemDependency)[], Range]>} ObjectDeserializerContext */
  16. /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[(string | LocalModuleDependency | AMDRequireItemDependency)[], Range]>} ObjectSerializerContext */
  17. class AMDRequireArrayDependency extends NullDependency {
  18. /**
  19. * Creates an instance of AMDRequireArrayDependency.
  20. * @param {(string | LocalModuleDependency | AMDRequireItemDependency)[]} depsArray deps array
  21. * @param {Range} range range
  22. */
  23. constructor(depsArray, range) {
  24. super();
  25. this.depsArray = depsArray;
  26. this.range = range;
  27. }
  28. get type() {
  29. return "amd require array";
  30. }
  31. get category() {
  32. return "amd";
  33. }
  34. /**
  35. * Serializes this instance into the provided serializer context.
  36. * @param {ObjectSerializerContext} context context
  37. */
  38. serialize(context) {
  39. context.write(this.depsArray).write(this.range);
  40. super.serialize(context);
  41. }
  42. /**
  43. * Restores this instance from the provided deserializer context.
  44. * @param {ObjectDeserializerContext} context context
  45. */
  46. deserialize(context) {
  47. this.depsArray = context.read();
  48. const c1 = context.rest;
  49. this.range = c1.read();
  50. super.deserialize(c1.rest);
  51. }
  52. }
  53. makeSerializable(
  54. AMDRequireArrayDependency,
  55. "webpack/lib/dependencies/AMDRequireArrayDependency"
  56. );
  57. AMDRequireArrayDependency.Template = class AMDRequireArrayDependencyTemplate extends (
  58. DependencyTemplate
  59. ) {
  60. /**
  61. * Applies the plugin by registering its hooks on the compiler.
  62. * @param {Dependency} dependency the dependency for which the template should be applied
  63. * @param {ReplaceSource} source the current replace source which can be modified
  64. * @param {DependencyTemplateContext} templateContext the context object
  65. * @returns {void}
  66. */
  67. apply(dependency, source, templateContext) {
  68. const dep = /** @type {AMDRequireArrayDependency} */ (dependency);
  69. const content = this.getContent(dep, templateContext);
  70. source.replace(dep.range[0], dep.range[1] - 1, content);
  71. }
  72. /**
  73. * Returns content.
  74. * @param {AMDRequireArrayDependency} dep the dependency for which the template should be applied
  75. * @param {DependencyTemplateContext} templateContext the context object
  76. * @returns {string} content
  77. */
  78. getContent(dep, templateContext) {
  79. const requires = dep.depsArray.map((dependency) =>
  80. this.contentForDependency(dependency, templateContext)
  81. );
  82. return `[${requires.join(", ")}]`;
  83. }
  84. /**
  85. * Content for dependency.
  86. * @param {string | LocalModuleDependency | AMDRequireItemDependency} dep the dependency for which the template should be applied
  87. * @param {DependencyTemplateContext} templateContext the context object
  88. * @returns {string} content
  89. */
  90. contentForDependency(
  91. dep,
  92. { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements }
  93. ) {
  94. if (typeof dep === "string") {
  95. return dep;
  96. }
  97. if (dep instanceof LocalModuleDependency) {
  98. return dep.localModule.variableName();
  99. }
  100. return runtimeTemplate.moduleExports({
  101. module: moduleGraph.getModule(dep),
  102. chunkGraph,
  103. request: dep.request,
  104. runtimeRequirements
  105. });
  106. }
  107. };
  108. module.exports = AMDRequireArrayDependency;