AsyncModuleHelpers.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Haijie Xie @hai-x
  4. */
  5. "use strict";
  6. const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
  7. /** @typedef {import("../ModuleGraph")} ModuleGraph */
  8. /** @typedef {import("../Module")} Module */
  9. /** @typedef {Set<Module>} Modules */
  10. /**
  11. * Gets outgoing async modules.
  12. * @param {ModuleGraph} moduleGraph module graph
  13. * @param {Module} module module
  14. * @returns {Modules} set of modules
  15. */
  16. const getOutgoingAsyncModules = (moduleGraph, module) => {
  17. /** @type {Modules} */
  18. const set = new Set();
  19. /** @type {Modules} */
  20. const seen = new Set();
  21. (function g(module) {
  22. if (!moduleGraph.isAsync(module) || seen.has(module)) return;
  23. seen.add(module);
  24. if (module.buildMeta && module.buildMeta.async) {
  25. set.add(module);
  26. } else {
  27. const outgoingConnectionMap =
  28. moduleGraph.getOutgoingConnectionsByModule(module);
  29. if (outgoingConnectionMap) {
  30. for (const [module, connections] of outgoingConnectionMap) {
  31. if (
  32. connections.some(
  33. (c) =>
  34. c.dependency instanceof HarmonyImportDependency &&
  35. c.isTargetActive(undefined)
  36. ) &&
  37. module
  38. ) {
  39. g(module);
  40. }
  41. }
  42. }
  43. }
  44. })(module);
  45. return set;
  46. };
  47. module.exports.getOutgoingAsyncModules = getOutgoingAsyncModules;