diff options
Diffstat (limited to 'node_modules/webpack/lib/NormalModuleReplacementPlugin.js')
| -rw-r--r-- | node_modules/webpack/lib/NormalModuleReplacementPlugin.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/NormalModuleReplacementPlugin.js b/node_modules/webpack/lib/NormalModuleReplacementPlugin.js new file mode 100644 index 00000000..fb44e088 --- /dev/null +++ b/node_modules/webpack/lib/NormalModuleReplacementPlugin.js @@ -0,0 +1,77 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +"use strict"; + +const { join, dirname } = require("./util/fs"); + +/** @typedef {import("./Compiler")} Compiler */ +/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */ + +/** @typedef {function(import("./NormalModuleFactory").ResolveData): void} ModuleReplacer */ + +class NormalModuleReplacementPlugin { + /** + * Create an instance of the plugin + * @param {RegExp} resourceRegExp the resource matcher + * @param {string|ModuleReplacer} newResource the resource replacement + */ + constructor(resourceRegExp, newResource) { + this.resourceRegExp = resourceRegExp; + this.newResource = newResource; + } + + /** + * Apply the plugin + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ + apply(compiler) { + const resourceRegExp = this.resourceRegExp; + const newResource = this.newResource; + compiler.hooks.normalModuleFactory.tap( + "NormalModuleReplacementPlugin", + nmf => { + nmf.hooks.beforeResolve.tap("NormalModuleReplacementPlugin", result => { + if (resourceRegExp.test(result.request)) { + if (typeof newResource === "function") { + newResource(result); + } else { + result.request = newResource; + } + } + }); + nmf.hooks.afterResolve.tap("NormalModuleReplacementPlugin", result => { + const createData = result.createData; + if ( + resourceRegExp.test(/** @type {string} */ (createData.resource)) + ) { + if (typeof newResource === "function") { + newResource(result); + } else { + const fs = + /** @type {InputFileSystem} */ + (compiler.inputFileSystem); + if ( + newResource.startsWith("/") || + (newResource.length > 1 && newResource[1] === ":") + ) { + createData.resource = newResource; + } else { + createData.resource = join( + fs, + dirname(fs, /** @type {string} */ (createData.resource)), + newResource + ); + } + } + } + }); + } + ); + } +} + +module.exports = NormalModuleReplacementPlugin; |
