UNPKG

webpack

Version:

Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

68 lines (60 loc) 2 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const WebpackError = require("./WebpackError"); /** @typedef {import("./Module")} Module */ class ModuleParseError extends WebpackError { /** * @param {Module} module the errored module * @param {string} source source code * @param {Error&any} err the parse error * @param {string[]} loaders the loaders used */ constructor(module, source, err, loaders) { let message = "Module parse failed: " + err.message; let loc = undefined; if (loaders.length >= 1) { message += `\nFile was processed with these loaders:${loaders .map(loader => `\n * ${loader}`) .join("")}`; message += "\nYou may need an additional loader to handle the result of these loaders."; } else { message += "\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders"; } if ( err.loc && typeof err.loc === "object" && typeof err.loc.line === "number" ) { var lineNumber = err.loc.line; if (/[\0\u0001\u0002\u0003\u0004\u0005\u0006\u0007]/.test(source)) { // binary file message += "\n(Source code omitted for this binary file)"; } else { const sourceLines = source.split(/\r?\n/); const start = Math.max(0, lineNumber - 3); const linesBefore = sourceLines.slice(start, lineNumber - 1); const theLine = sourceLines[lineNumber - 1]; const linesAfter = sourceLines.slice(lineNumber, lineNumber + 2); message += linesBefore.map(l => `\n| ${l}`).join("") + `\n> ${theLine}` + linesAfter.map(l => `\n| ${l}`).join(""); } loc = err.loc; } else { message += "\n" + err.stack; } super(message); this.name = "ModuleParseError"; this.module = module; this.loc = loc; this.error = err; Error.captureStackTrace(this, this.constructor); } } module.exports = ModuleParseError;