URLPlugin.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Ivan Kopeykin @vankop
  4. */
  5. "use strict";
  6. const {
  7. JAVASCRIPT_MODULE_TYPE_AUTO,
  8. JAVASCRIPT_MODULE_TYPE_ESM
  9. } = require("../ModuleTypeConstants");
  10. const URLContextDependency = require("../dependencies/URLContextDependency");
  11. const URLDependency = require("../dependencies/URLDependency");
  12. const URLParserPlugin = require("../url/URLParserPlugin");
  13. /**
  14. * @import {
  15. * JavascriptParserOptions
  16. * } from "../../declarations/WebpackOptions"
  17. */
  18. /** @import Compiler from "../Compiler" */
  19. /** @import JavascriptParser from "../javascript/JavascriptParser" */
  20. const PLUGIN_NAME = "URLPlugin";
  21. class URLPlugin {
  22. /**
  23. * Applies the plugin by registering its hooks on the compiler.
  24. * @param {Compiler} compiler compiler
  25. */
  26. apply(compiler) {
  27. compiler.hooks.compilation.tap(
  28. PLUGIN_NAME,
  29. (compilation, { normalModuleFactory, contextModuleFactory }) => {
  30. compilation.dependencyFactories.set(URLDependency, normalModuleFactory);
  31. compilation.dependencyTemplates.set(
  32. URLDependency,
  33. new URLDependency.Template()
  34. );
  35. compilation.dependencyFactories.set(
  36. URLContextDependency,
  37. contextModuleFactory
  38. );
  39. compilation.dependencyTemplates.set(
  40. URLContextDependency,
  41. new URLContextDependency.Template()
  42. );
  43. /**
  44. * Handles the hook callback for this code path.
  45. * @param {JavascriptParser} parser parser parser
  46. * @param {JavascriptParserOptions} parserOptions parserOptions
  47. * @returns {void}
  48. */
  49. const handler = (parser, parserOptions) => {
  50. if (parserOptions.url === false) return;
  51. new URLParserPlugin(parserOptions).apply(parser);
  52. };
  53. normalModuleFactory.hooks.parser
  54. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  55. .tap(PLUGIN_NAME, handler);
  56. normalModuleFactory.hooks.parser
  57. .for(JAVASCRIPT_MODULE_TYPE_ESM)
  58. .tap(PLUGIN_NAME, handler);
  59. }
  60. );
  61. }
  62. }
  63. module.exports = URLPlugin;