diff options
Diffstat (limited to 'node_modules/webpack/lib/ErrorHelpers.js')
| -rw-r--r-- | node_modules/webpack/lib/ErrorHelpers.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/ErrorHelpers.js b/node_modules/webpack/lib/ErrorHelpers.js new file mode 100644 index 00000000..bec99ef7 --- /dev/null +++ b/node_modules/webpack/lib/ErrorHelpers.js @@ -0,0 +1,101 @@ +/* + 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; |
