@ima/dev-utils
Version:
IMA.js dev utils used used mainly in @ima/cli and other dev-related utilities.
61 lines (60 loc) • 2.36 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.swcLoaderErrorParser = void 0;
const strip_ansi_1 = __importDefault(require("strip-ansi"));
const parserUtils_1 = require("./parserUtils");
const helpers_1 = require("../helpers");
const RE_SWC_LINE_NUMBER = /(\d+) │/;
/**
* https://github.com/swc-project/swc/pull/3946
*
* SWC loader-specific error parser. Tries to parse error location from
* webpack stats error object or browsers Error object.
*/
function swcLoaderErrorParser(error) {
const cleanedMessage = (0, strip_ansi_1.default)(error.message);
const messageLines = cleanedMessage.split('\n');
// Parse error message
const compileError = {
name: 'Syntax error',
message: messageLines[2].replace(/×/gi, '').trim(),
column: 1, // swc-loader does not report columns reliably
};
// Parse error location
const lineNumberMatch = cleanedMessage.match(RE_SWC_LINE_NUMBER);
if (lineNumberMatch && lineNumberMatch[1]) {
compileError.line = parseInt(lineNumberMatch[1]);
}
if (error.moduleIdentifier) {
// Parse filename from moduleIdentifier
compileError.fileUri = error.moduleIdentifier?.includes('!')
? error.moduleIdentifier?.split('!').pop() ?? undefined
: error.moduleIdentifier;
}
else if (error.stack) {
/**
* Parse from error stack. The location is always on the first line
* since swc-loader throws an error in this broken module.
*/
if (helpers_1.RE_VALID_FRAME_FIREFOX.test(error.stack)) {
compileError.fileUri = error.stack.split('\n')[0].split('@').shift();
}
else {
const cleanedStackLines = error.stack
.replace(error.message, '')
.split('\n');
for (const line of cleanedStackLines) {
const fileUriMatch = line.match(parserUtils_1.RE_FILE_PATH_REGEX);
if (fileUriMatch) {
compileError.fileUri = fileUriMatch[0];
break;
}
}
}
}
return compileError;
}
exports.swcLoaderErrorParser = swcLoaderErrorParser;