mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	MIT License http://www.opensource.org/licenses/mit-license.php
 | |
| 	Author Tobias Koppers @sokra
 | |
| */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const loaderFlag = "LOADER_EXECUTION";
 | |
| 
 | |
| const webpackOptionsFlag = "WEBPACK_OPTIONS";
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @param {string} flag flag to cut off
 | |
|  * @returns {string} stack trace without the specified flag included
 | |
|  */
 | |
| const cutOffByFlag = (stack, flag) => {
 | |
| 	const errorStack = stack.split("\n");
 | |
| 	for (let i = 0; i < errorStack.length; i++) {
 | |
| 		if (errorStack[i].includes(flag)) {
 | |
| 			errorStack.length = i;
 | |
| 		}
 | |
| 	}
 | |
| 	return errorStack.join("\n");
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @returns {string} stack trace without the loader execution flag included
 | |
|  */
 | |
| const cutOffLoaderExecution = stack => cutOffByFlag(stack, loaderFlag);
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @returns {string} stack trace without the webpack options flag included
 | |
|  */
 | |
| const cutOffWebpackOptions = stack => cutOffByFlag(stack, webpackOptionsFlag);
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @param {string} message error message
 | |
|  * @returns {string} stack trace without the message included
 | |
|  */
 | |
| const cutOffMultilineMessage = (stack, message) => {
 | |
| 	const stackSplitByLines = stack.split("\n");
 | |
| 	const messageSplitByLines = message.split("\n");
 | |
| 
 | |
| 	/** @type {string[]} */
 | |
| 	const result = [];
 | |
| 
 | |
| 	for (const [idx, line] of stackSplitByLines.entries()) {
 | |
| 		if (!line.includes(messageSplitByLines[idx])) result.push(line);
 | |
| 	}
 | |
| 
 | |
| 	return result.join("\n");
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @param {string} message error message
 | |
|  * @returns {string} stack trace without the message included
 | |
|  */
 | |
| const cutOffMessage = (stack, message) => {
 | |
| 	const nextLine = stack.indexOf("\n");
 | |
| 	if (nextLine === -1) {
 | |
| 		return stack === message ? "" : stack;
 | |
| 	}
 | |
| 	const firstLine = stack.slice(0, nextLine);
 | |
| 	return firstLine === message ? stack.slice(nextLine + 1) : stack;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @param {string} message error message
 | |
|  * @returns {string} stack trace without the loader execution flag and message included
 | |
|  */
 | |
| const cleanUp = (stack, message) => {
 | |
| 	stack = cutOffLoaderExecution(stack);
 | |
| 	stack = cutOffMessage(stack, message);
 | |
| 	return stack;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @param {string} stack stack trace
 | |
|  * @param {string} message error message
 | |
|  * @returns {string} stack trace without the webpack options flag and message included
 | |
|  */
 | |
| const cleanUpWebpackOptions = (stack, message) => {
 | |
| 	stack = cutOffWebpackOptions(stack);
 | |
| 	stack = cutOffMultilineMessage(stack, message);
 | |
| 	return stack;
 | |
| };
 | |
| 
 | |
| module.exports.cleanUp = cleanUp;
 | |
| module.exports.cleanUpWebpackOptions = cleanUpWebpackOptions;
 | |
| module.exports.cutOffByFlag = cutOffByFlag;
 | |
| module.exports.cutOffLoaderExecution = cutOffLoaderExecution;
 | |
| module.exports.cutOffMessage = cutOffMessage;
 | |
| module.exports.cutOffMultilineMessage = cutOffMultilineMessage;
 | |
| module.exports.cutOffWebpackOptions = cutOffWebpackOptions;
 |