UNPKG

@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
"use strict"; 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;