diff options
Diffstat (limited to 'node_modules/webpack/lib/async-modules/InferAsyncModulesPlugin.js')
| -rw-r--r-- | node_modules/webpack/lib/async-modules/InferAsyncModulesPlugin.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/async-modules/InferAsyncModulesPlugin.js b/node_modules/webpack/lib/async-modules/InferAsyncModulesPlugin.js new file mode 100644 index 00000000..d395e30c --- /dev/null +++ b/node_modules/webpack/lib/async-modules/InferAsyncModulesPlugin.js @@ -0,0 +1,55 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +"use strict"; + +const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency"); + +/** @typedef {import("../Compiler")} Compiler */ +/** @typedef {import("../Module")} Module */ + +class InferAsyncModulesPlugin { + /** + * Apply the plugin + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ + apply(compiler) { + compiler.hooks.compilation.tap("InferAsyncModulesPlugin", compilation => { + const { moduleGraph } = compilation; + compilation.hooks.finishModules.tap( + "InferAsyncModulesPlugin", + modules => { + /** @type {Set<Module>} */ + const queue = new Set(); + for (const module of modules) { + if (module.buildMeta && module.buildMeta.async) { + queue.add(module); + } + } + for (const module of queue) { + moduleGraph.setAsync(module); + for (const [ + originModule, + connections + ] of moduleGraph.getIncomingConnectionsByOriginModule(module)) { + if ( + connections.some( + c => + c.dependency instanceof HarmonyImportDependency && + c.isTargetActive(undefined) + ) + ) { + queue.add(/** @type {Module} */ (originModule)); + } + } + } + } + ); + }); + } +} + +module.exports = InferAsyncModulesPlugin; |
