109 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
 | |
|     if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
 | |
|     if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
 | |
|     return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
 | |
| };
 | |
| var _a, _CLIPlugin_progressStates;
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.CLIPlugin = void 0;
 | |
| class CLIPlugin {
 | |
|     constructor(options) {
 | |
|         this.options = options;
 | |
|     }
 | |
|     async setupBundleAnalyzerPlugin(compiler) {
 | |
|         // eslint-disable-next-line node/no-extraneous-require,@typescript-eslint/no-var-requires
 | |
|         const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
 | |
|         const bundleAnalyzerPlugin = Boolean(compiler.options.plugins.find((plugin) => plugin instanceof BundleAnalyzerPlugin));
 | |
|         if (!bundleAnalyzerPlugin) {
 | |
|             new BundleAnalyzerPlugin().apply(compiler);
 | |
|         }
 | |
|     }
 | |
|     setupProgressPlugin(compiler) {
 | |
|         const { ProgressPlugin } = compiler.webpack || require("webpack");
 | |
|         const progressPlugin = Boolean(compiler.options.plugins.find((plugin) => plugin instanceof ProgressPlugin));
 | |
|         if (progressPlugin) {
 | |
|             return;
 | |
|         }
 | |
|         const isProfile = this.options.progress === "profile";
 | |
|         const options = {
 | |
|             profile: isProfile,
 | |
|         };
 | |
|         if (this.options.isMultiCompiler && ProgressPlugin.createDefaultHandler) {
 | |
|             const handler = ProgressPlugin.createDefaultHandler(isProfile, compiler.getInfrastructureLogger("webpack.Progress"));
 | |
|             const idx = __classPrivateFieldGet(CLIPlugin, _a, "f", _CLIPlugin_progressStates).length;
 | |
|             __classPrivateFieldGet(CLIPlugin, _a, "f", _CLIPlugin_progressStates)[idx] = [0];
 | |
|             options.handler = (p, msg, ...args) => {
 | |
|                 __classPrivateFieldGet(CLIPlugin, _a, "f", _CLIPlugin_progressStates)[idx] = [p, msg, ...args];
 | |
|                 let sum = 0;
 | |
|                 for (const [p] of __classPrivateFieldGet(CLIPlugin, _a, "f", _CLIPlugin_progressStates)) {
 | |
|                     sum += p;
 | |
|                 }
 | |
|                 handler(sum / __classPrivateFieldGet(CLIPlugin, _a, "f", _CLIPlugin_progressStates).length, `[${compiler.name ? compiler.name : idx}] ${msg}`, ...args);
 | |
|             };
 | |
|         }
 | |
|         new ProgressPlugin(options).apply(compiler);
 | |
|     }
 | |
|     setupHelpfulOutput(compiler) {
 | |
|         const pluginName = "webpack-cli";
 | |
|         const getCompilationName = () => (compiler.name ? `'${compiler.name}'` : "");
 | |
|         const logCompilation = (message) => {
 | |
|             if (process.env.WEBPACK_CLI_START_FINISH_FORCE_LOG) {
 | |
|                 process.stderr.write(message);
 | |
|             }
 | |
|             else {
 | |
|                 this.logger.log(message);
 | |
|             }
 | |
|         };
 | |
|         const { configPath } = this.options;
 | |
|         compiler.hooks.run.tap(pluginName, () => {
 | |
|             const name = getCompilationName();
 | |
|             logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `);
 | |
|             if (configPath) {
 | |
|                 this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: ${configPath
 | |
|                     .map((path) => `'${path}'`)
 | |
|                     .join(", ")}`);
 | |
|             }
 | |
|         });
 | |
|         compiler.hooks.watchRun.tap(pluginName, (compiler) => {
 | |
|             const { bail, watch } = compiler.options;
 | |
|             if (bail && watch) {
 | |
|                 this.logger.warn('You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.');
 | |
|             }
 | |
|             const name = getCompilationName();
 | |
|             logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `);
 | |
|             if (configPath) {
 | |
|                 this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`);
 | |
|             }
 | |
|         });
 | |
|         compiler.hooks.invalid.tap(pluginName, (filename, changeTime) => {
 | |
|             const date = new Date(changeTime);
 | |
|             this.logger.log(`File '${filename}' was modified`);
 | |
|             this.logger.log(`Changed time is ${date} (timestamp is ${changeTime})`);
 | |
|         });
 | |
|         (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap(pluginName, () => {
 | |
|             const name = getCompilationName();
 | |
|             logCompilation(`Compiler${name ? ` ${name}` : ""} finished`);
 | |
|             process.nextTick(() => {
 | |
|                 if (compiler.watchMode) {
 | |
|                     this.logger.log(`Compiler${name ? `${name}` : ""} is watching files for updates...`);
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
|     }
 | |
|     apply(compiler) {
 | |
|         this.logger = compiler.getInfrastructureLogger("webpack-cli");
 | |
|         if (this.options.progress) {
 | |
|             this.setupProgressPlugin(compiler);
 | |
|         }
 | |
|         if (this.options.analyze) {
 | |
|             this.setupBundleAnalyzerPlugin(compiler);
 | |
|         }
 | |
|         this.setupHelpfulOutput(compiler);
 | |
|     }
 | |
| }
 | |
| exports.CLIPlugin = CLIPlugin;
 | |
| _a = CLIPlugin;
 | |
| _CLIPlugin_progressStates = { value: [] };
 | |
| module.exports = CLIPlugin;
 |