ModuleTemplate.js 5.5 KB

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