UNPKG

modify-source-webpack-plugin

Version:

Webpack plugin for modifying modules source

109 lines 4.58 kB
"use strict"; exports.__esModule = true; exports.ModifySourcePlugin = void 0; var operations_1 = require("./operations"); var validate = require('schema-utils').validate; var validationSchema = { type: 'object', additionalProperties: false, properties: { rules: { type: 'array', items: { type: 'object', additionalProperties: false, properties: { test: { anyOf: [{ "instanceof": 'Function' }, { "instanceof": 'RegExp' }] }, operations: { type: 'array', items: { type: 'object' } } } } }, constants: { type: 'object' }, debug: { type: 'boolean' } } }; var PLUGIN_NAME = 'ModifySourcePlugin'; var ModifySourcePlugin = /** @class */ (function () { function ModifySourcePlugin(options) { this.options = options; validate(validationSchema, options, { name: PLUGIN_NAME }); } ModifySourcePlugin.prototype.apply = function (compiler) { var _a = this.options, rules = _a.rules, debug = _a.debug, _b = _a.constants, constants = _b === void 0 ? {} : _b; compiler.hooks.compilation.tap(PLUGIN_NAME, function (compilation) { var _a; var modifiedModules = []; var tapCallback = function (_, normalModule) { var userRequest = normalModule.userRequest || ''; var startIndex = userRequest.lastIndexOf('!') === -1 ? 0 : userRequest.lastIndexOf('!') + 1; var moduleRequest = userRequest .substring(startIndex) .replace(/\\/g, '/'); if (modifiedModules.includes(moduleRequest)) { return; } rules.forEach(function (ruleOptions) { var _a; var test = ruleOptions.test; var isMatched = (function () { if (typeof test === 'function' && test(normalModule)) { return true; } return test instanceof RegExp && test.test(moduleRequest); })(); if (isMatched) { var serializableOperations = (_a = ruleOptions.operations) === null || _a === void 0 ? void 0 : _a.map(function (op) { return operations_1.Operation.makeSerializable(op); }); var loader = void 0; try { loader = require.resolve('./loader.js'); } catch (e) { loader = require.resolve('../build/loader.js'); } normalModule.loaders.push({ loader: loader, options: { moduleRequest: moduleRequest, operations: serializableOperations, constants: constants } }); modifiedModules.push(moduleRequest); if (debug) { // eslint-disable-next-line no-console console.log("\n[".concat(PLUGIN_NAME, "] Use loader for \"").concat(moduleRequest, "\".")); } } }); }; var NormalModule = (_a = compiler.webpack) === null || _a === void 0 ? void 0 : _a.NormalModule; var isNormalModuleAvailable = Boolean(NormalModule) && Boolean(NormalModule.getCompilationHooks); if (isNormalModuleAvailable) { NormalModule.getCompilationHooks(compilation).beforeLoaders.tap(PLUGIN_NAME, tapCallback); } else { compilation.hooks.normalModuleLoader.tap(PLUGIN_NAME, tapCallback); } }); }; return ModifySourcePlugin; }()); exports.ModifySourcePlugin = ModifySourcePlugin; //# sourceMappingURL=ModifySourcePlugin.js.map