保誠-保戶業務員媒合平台
Tomas
2022-05-19 957a1f10a06fdbb76f1a0ba94fe44126c613fee3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
    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;