ModuleTemplate.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const util = require("util");
  7. const memoize = require("./util/memoize");
  8. /** @typedef {import("tapable").Tap} Tap */
  9. /** @typedef {import("webpack-sources").Source} Source */
  10. /** @typedef {import("./Chunk")} Chunk */
  11. /** @typedef {import("./ChunkGraph")} ChunkGraph */
  12. /** @typedef {import("./Compilation")} Compilation */
  13. /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
  14. /** @typedef {import("./Module")} Module */
  15. /** @typedef {import("./ModuleGraph")} ModuleGraph */
  16. /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
  17. /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
  18. /** @typedef {import("./util/Hash")} Hash */
  19. /**
  20. * @template T
  21. * @typedef {import("tapable").IfSet<T>} IfSet
  22. */
  23. const getJavascriptModulesPlugin = memoize(() =>
  24. require("./javascript/JavascriptModulesPlugin")
  25. );
  26. // TODO webpack 6: remove this class
  27. class ModuleTemplate {
  28. /**
  29. * @param {RuntimeTemplate} runtimeTemplate the runtime template
  30. * @param {Compilation} compilation the compilation
  31. */
  32. constructor(runtimeTemplate, compilation) {
  33. this._runtimeTemplate = runtimeTemplate;
  34. this.type = "javascript";
  35. this.hooks = Object.freeze({
  36. content: {
  37. tap: util.deprecate(
  38. /**
  39. * @template AdditionalOptions
  40. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  41. * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
  42. */
  43. (options, fn) => {
  44. getJavascriptModulesPlugin()
  45. .getCompilationHooks(compilation)
  46. .renderModuleContent.tap(
  47. options,
  48. (source, module, renderContext) =>
  49. fn(
  50. source,
  51. module,
  52. renderContext,
  53. renderContext.dependencyTemplates
  54. )
  55. );
  56. },
  57. "ModuleTemplate.hooks.content is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  58. "DEP_MODULE_TEMPLATE_CONTENT"
  59. )
  60. },
  61. module: {
  62. tap: util.deprecate(
  63. /**
  64. * @template AdditionalOptions
  65. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  66. * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
  67. */
  68. (options, fn) => {
  69. getJavascriptModulesPlugin()
  70. .getCompilationHooks(compilation)
  71. .renderModuleContent.tap(
  72. options,
  73. (source, module, renderContext) =>
  74. fn(
  75. source,
  76. module,
  77. renderContext,
  78. renderContext.dependencyTemplates
  79. )
  80. );
  81. },
  82. "ModuleTemplate.hooks.module is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  83. "DEP_MODULE_TEMPLATE_MODULE"
  84. )
  85. },
  86. render: {
  87. tap: util.deprecate(
  88. /**
  89. * @template AdditionalOptions
  90. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  91. * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
  92. */
  93. (options, fn) => {
  94. getJavascriptModulesPlugin()
  95. .getCompilationHooks(compilation)
  96. .renderModuleContainer.tap(
  97. options,
  98. (source, module, renderContext) =>
  99. fn(
  100. source,
  101. module,
  102. renderContext,
  103. renderContext.dependencyTemplates
  104. )
  105. );
  106. },
  107. "ModuleTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer instead)",
  108. "DEP_MODULE_TEMPLATE_RENDER"
  109. )
  110. },
  111. package: {
  112. tap: util.deprecate(
  113. /**
  114. * @template AdditionalOptions
  115. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  116. * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
  117. */
  118. (options, fn) => {
  119. getJavascriptModulesPlugin()
  120. .getCompilationHooks(compilation)
  121. .renderModulePackage.tap(
  122. options,
  123. (source, module, renderContext) =>
  124. fn(
  125. source,
  126. module,
  127. renderContext,
  128. renderContext.dependencyTemplates
  129. )
  130. );
  131. },
  132. "ModuleTemplate.hooks.package is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModulePackage instead)",
  133. "DEP_MODULE_TEMPLATE_PACKAGE"
  134. )
  135. },
  136. hash: {
  137. tap: util.deprecate(
  138. /**
  139. * @template AdditionalOptions
  140. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  141. * @param {function(Hash): void} fn fn
  142. */
  143. (options, fn) => {
  144. compilation.hooks.fullHash.tap(options, fn);
  145. },
  146. "ModuleTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
  147. "DEP_MODULE_TEMPLATE_HASH"
  148. )
  149. }
  150. });
  151. }
  152. }
  153. Object.defineProperty(ModuleTemplate.prototype, "runtimeTemplate", {
  154. get: util.deprecate(
  155. /**
  156. * @this {ModuleTemplate}
  157. * @returns {RuntimeTemplate} output options
  158. */
  159. function () {
  160. return this._runtimeTemplate;
  161. },
  162. "ModuleTemplate.runtimeTemplate is deprecated (use Compilation.runtimeTemplate instead)",
  163. "DEP_WEBPACK_CHUNK_TEMPLATE_OUTPUT_OPTIONS"
  164. )
  165. });
  166. module.exports = ModuleTemplate;