123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /*
- 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 = [];
- stackSplitByLines.forEach((line, idx) => {
- 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;
- } else {
- 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;
- };
- exports.cutOffByFlag = cutOffByFlag;
- exports.cutOffLoaderExecution = cutOffLoaderExecution;
- exports.cutOffWebpackOptions = cutOffWebpackOptions;
- exports.cutOffMultilineMessage = cutOffMultilineMessage;
- exports.cutOffMessage = cutOffMessage;
- exports.cleanUp = cleanUp;
- exports.cleanUpWebpackOptions = cleanUpWebpackOptions;
|