ModuleTemplate.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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("./Compilation")} Compilation */
  12. /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
  13. /** @typedef {import("./Module")} Module */
  14. /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
  15. /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
  16. /** @typedef {import("./javascript/JavascriptModulesPlugin").ModuleRenderContext} ModuleRenderContext */
  17. /** @typedef {import("./util/Hash")} Hash */
  18. /**
  19. * Defines the if set type used by this module.
  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. * Creates an instance of ModuleTemplate.
  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. * Handles the callback logic for this hook.
  41. * @template AdditionalOptions
  42. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  43. * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  44. */
  45. (options, fn) => {
  46. getJavascriptModulesPlugin()
  47. .getCompilationHooks(compilation)
  48. .renderModuleContent.tap(
  49. options,
  50. (source, module, renderContext) =>
  51. fn(
  52. source,
  53. module,
  54. renderContext,
  55. renderContext.dependencyTemplates
  56. )
  57. );
  58. },
  59. "ModuleTemplate.hooks.content is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  60. "DEP_MODULE_TEMPLATE_CONTENT"
  61. )
  62. },
  63. module: {
  64. tap: util.deprecate(
  65. /**
  66. * Handles the callback logic for this hook.
  67. * @template AdditionalOptions
  68. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  69. * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  70. */
  71. (options, fn) => {
  72. getJavascriptModulesPlugin()
  73. .getCompilationHooks(compilation)
  74. .renderModuleContent.tap(
  75. options,
  76. (source, module, renderContext) =>
  77. fn(
  78. source,
  79. module,
  80. renderContext,
  81. renderContext.dependencyTemplates
  82. )
  83. );
  84. },
  85. "ModuleTemplate.hooks.module is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  86. "DEP_MODULE_TEMPLATE_MODULE"
  87. )
  88. },
  89. render: {
  90. tap: util.deprecate(
  91. /**
  92. * Handles the callback logic for this hook.
  93. * @template AdditionalOptions
  94. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  95. * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  96. */
  97. (options, fn) => {
  98. getJavascriptModulesPlugin()
  99. .getCompilationHooks(compilation)
  100. .renderModuleContainer.tap(
  101. options,
  102. (source, module, renderContext) =>
  103. fn(
  104. source,
  105. module,
  106. renderContext,
  107. renderContext.dependencyTemplates
  108. )
  109. );
  110. },
  111. "ModuleTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer instead)",
  112. "DEP_MODULE_TEMPLATE_RENDER"
  113. )
  114. },
  115. package: {
  116. tap: util.deprecate(
  117. /**
  118. * Handles the callback logic for this hook.
  119. * @template AdditionalOptions
  120. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  121. * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  122. */
  123. (options, fn) => {
  124. getJavascriptModulesPlugin()
  125. .getCompilationHooks(compilation)
  126. .renderModulePackage.tap(
  127. options,
  128. (source, module, renderContext) =>
  129. fn(
  130. source,
  131. module,
  132. renderContext,
  133. renderContext.dependencyTemplates
  134. )
  135. );
  136. },
  137. "ModuleTemplate.hooks.package is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModulePackage instead)",
  138. "DEP_MODULE_TEMPLATE_PACKAGE"
  139. )
  140. },
  141. hash: {
  142. tap: util.deprecate(
  143. /**
  144. * Handles the callback logic for this hook.
  145. * @template AdditionalOptions
  146. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  147. * @param {(hash: Hash) => void} fn fn
  148. */
  149. (options, fn) => {
  150. compilation.hooks.fullHash.tap(options, fn);
  151. },
  152. "ModuleTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
  153. "DEP_MODULE_TEMPLATE_HASH"
  154. )
  155. }
  156. });
  157. }
  158. }
  159. Object.defineProperty(ModuleTemplate.prototype, "runtimeTemplate", {
  160. get: util.deprecate(
  161. /**
  162. * Returns output options.
  163. * @this {ModuleTemplate}
  164. * @returns {RuntimeTemplate} output options
  165. */
  166. function runtimeTemplate() {
  167. return this._runtimeTemplate;
  168. },
  169. "ModuleTemplate.runtimeTemplate is deprecated (use Compilation.runtimeTemplate instead)",
  170. "DEP_WEBPACK_CHUNK_TEMPLATE_OUTPUT_OPTIONS"
  171. )
  172. });
  173. module.exports = ModuleTemplate;