AsyncModuleHelpers.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. /**
  10. * @param {ModuleGraph} moduleGraph module graph
  11. * @param {Module} module module
  12. * @returns {Set<Module>} set of modules
  13. */
  14. const getOutgoingAsyncModules = (moduleGraph, module) => {
  15. /** @type {Set<Module>} */
  16. const set = new Set();
  17. /** @type {Set<Module>} */
  18. const seen = new Set();
  19. (function g(/** @type {Module} */ module) {
  20. if (!moduleGraph.isAsync(module) || seen.has(module)) return;
  21. seen.add(module);
  22. if (module.buildMeta && module.buildMeta.async) {
  23. set.add(module);
  24. } else {
  25. const outgoingConnectionMap =
  26. moduleGraph.getOutgoingConnectionsByModule(module);
  27. if (outgoingConnectionMap) {
  28. for (const [module, connections] of outgoingConnectionMap) {
  29. if (
  30. connections.some(
  31. c =>
  32. c.dependency instanceof HarmonyImportDependency &&
  33. c.isTargetActive(undefined)
  34. ) &&
  35. module
  36. ) {
  37. g(module);
  38. }
  39. }
  40. }
  41. }
  42. })(module);
  43. return set;
  44. };
  45. module.exports.getOutgoingAsyncModules = getOutgoingAsyncModules;