ModuleTemplate.js 5.5 KB

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