URLPlugin.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
  14. /** @typedef {import("../Compiler")} Compiler */
  15. /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
  16. /** @typedef {import("../javascript/JavascriptParser")} Parser */
  17. const PLUGIN_NAME = "URLPlugin";
  18. class URLPlugin {
  19. /**
  20. * @param {Compiler} compiler compiler
  21. */
  22. apply(compiler) {
  23. compiler.hooks.compilation.tap(
  24. PLUGIN_NAME,
  25. (compilation, { normalModuleFactory, contextModuleFactory }) => {
  26. compilation.dependencyFactories.set(URLDependency, normalModuleFactory);
  27. compilation.dependencyTemplates.set(
  28. URLDependency,
  29. new URLDependency.Template()
  30. );
  31. compilation.dependencyFactories.set(
  32. URLContextDependency,
  33. contextModuleFactory
  34. );
  35. compilation.dependencyTemplates.set(
  36. URLContextDependency,
  37. new URLContextDependency.Template()
  38. );
  39. /**
  40. * @param {Parser} parser parser parser
  41. * @param {JavascriptParserOptions} parserOptions parserOptions
  42. * @returns {void}
  43. */
  44. const handler = (parser, parserOptions) => {
  45. if (parserOptions.url === false) return;
  46. new URLParserPlugin(parserOptions).apply(parser);
  47. };
  48. normalModuleFactory.hooks.parser
  49. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  50. .tap(PLUGIN_NAME, handler);
  51. normalModuleFactory.hooks.parser
  52. .for(JAVASCRIPT_MODULE_TYPE_ESM)
  53. .tap(PLUGIN_NAME, handler);
  54. }
  55. );
  56. }
  57. }
  58. module.exports = URLPlugin;