aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/dependencies/LoaderPlugin.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-09-20 02:56:13 +0200
committerFlorian Dold <florian.dold@gmail.com>2018-09-20 02:56:13 +0200
commitbbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch)
treec58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/webpack/lib/dependencies/LoaderPlugin.js
parent003fb34971cf63466184351b4db5f7c67df4f444 (diff)
update packages
Diffstat (limited to 'node_modules/webpack/lib/dependencies/LoaderPlugin.js')
-rw-r--r--node_modules/webpack/lib/dependencies/LoaderPlugin.js177
1 files changed, 117 insertions, 60 deletions
diff --git a/node_modules/webpack/lib/dependencies/LoaderPlugin.js b/node_modules/webpack/lib/dependencies/LoaderPlugin.js
index a565ebbc4..c781d0636 100644
--- a/node_modules/webpack/lib/dependencies/LoaderPlugin.js
+++ b/node_modules/webpack/lib/dependencies/LoaderPlugin.js
@@ -1,60 +1,117 @@
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const LoaderDependency = require("./LoaderDependency");
-
-class LoaderPlugin {
-
- apply(compiler) {
- compiler.plugin("compilation", (compilation, params) => {
- const normalModuleFactory = params.normalModuleFactory;
-
- compilation.dependencyFactories.set(LoaderDependency, normalModuleFactory);
- });
- compiler.plugin("compilation", (compilation) => {
- compilation.plugin("normal-module-loader", (loaderContext, module) => {
- loaderContext.loadModule = function loadModule(request, callback) {
- const dep = new LoaderDependency(request);
- dep.loc = request;
- compilation.addModuleDependencies(module, [
- [dep]
- ], true, "lm", false, (err) => {
- if(err) return callback(err);
-
- if(!dep.module) return callback(new Error("Cannot load the module"));
- if(dep.module.building) dep.module.building.push(next);
- else next();
-
- function next(err) {
- if(err) return callback(err);
-
- if(dep.module.error) return callback(dep.module.error);
- if(!dep.module._source) throw new Error("The module created for a LoaderDependency must have a property _source");
- let source, map;
- const moduleSource = dep.module._source;
- if(moduleSource.sourceAndMap) {
- const sourceAndMap = moduleSource.sourceAndMap();
- map = sourceAndMap.map;
- source = sourceAndMap.source;
- } else {
- map = moduleSource.map();
- source = moduleSource.source();
- }
- if(dep.module.fileDependencies) {
- dep.module.fileDependencies.forEach((dep) => loaderContext.addDependency(dep));
- }
- if(dep.module.contextDependencies) {
- dep.module.contextDependencies.forEach((dep) => loaderContext.addContextDependency(dep));
- }
- return callback(null, source, map, dep.module);
- }
- });
- };
- });
- });
- }
-}
-module.exports = LoaderPlugin;
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+const LoaderDependency = require("./LoaderDependency");
+const NormalModule = require("../NormalModule");
+
+/** @typedef {import("../Module")} Module */
+
+/**
+ * @callback LoadModuleCallback
+ * @param {Error=} err error object
+ * @param {string=} source source code
+ * @param {object=} map source map
+ * @param {Module=} module loaded module if successful
+ */
+
+class LoaderPlugin {
+ apply(compiler) {
+ compiler.hooks.compilation.tap(
+ "LoaderPlugin",
+ (compilation, { normalModuleFactory }) => {
+ compilation.dependencyFactories.set(
+ LoaderDependency,
+ normalModuleFactory
+ );
+ }
+ );
+
+ compiler.hooks.compilation.tap("LoaderPlugin", compilation => {
+ compilation.hooks.normalModuleLoader.tap(
+ "LoaderPlugin",
+ (loaderContext, module) => {
+ /**
+ * @param {string} request the request string to load the module from
+ * @param {LoadModuleCallback} callback callback returning the loaded module or error
+ * @returns {void}
+ */
+ loaderContext.loadModule = (request, callback) => {
+ const dep = new LoaderDependency(request);
+ dep.loc = {
+ name: request
+ };
+ const factory = compilation.dependencyFactories.get(
+ dep.constructor
+ );
+ if (factory === undefined) {
+ return callback(
+ new Error(
+ `No module factory available for dependency type: ${
+ dep.constructor.name
+ }`
+ )
+ );
+ }
+ compilation.semaphore.release();
+ compilation.addModuleDependencies(
+ module,
+ [
+ {
+ factory,
+ dependencies: [dep]
+ }
+ ],
+ true,
+ "lm",
+ true,
+ err => {
+ compilation.semaphore.acquire(() => {
+ if (err) {
+ return callback(err);
+ }
+ if (!dep.module) {
+ return callback(new Error("Cannot load the module"));
+ }
+ // TODO consider removing this in webpack 5
+ if (dep.module instanceof NormalModule && dep.module.error) {
+ return callback(dep.module.error);
+ }
+ if (!dep.module._source) {
+ throw new Error(
+ "The module created for a LoaderDependency must have a property _source"
+ );
+ }
+ let source, map;
+ const moduleSource = dep.module._source;
+ if (moduleSource.sourceAndMap) {
+ const sourceAndMap = moduleSource.sourceAndMap();
+ map = sourceAndMap.map;
+ source = sourceAndMap.source;
+ } else {
+ map = moduleSource.map();
+ source = moduleSource.source();
+ }
+ if (dep.module.buildInfo.fileDependencies) {
+ for (const d of dep.module.buildInfo.fileDependencies) {
+ loaderContext.addDependency(d);
+ }
+ }
+ if (dep.module.buildInfo.contextDependencies) {
+ for (const d of dep.module.buildInfo.contextDependencies) {
+ loaderContext.addContextDependency(d);
+ }
+ }
+ return callback(null, source, map, dep.module);
+ });
+ }
+ );
+ };
+ }
+ );
+ });
+ }
+}
+module.exports = LoaderPlugin;