@rstest/core
Version:
The Rsbuild-based test tool.
103 lines (102 loc) • 5.85 kB
JavaScript
import 'module';
/*#__PURE__*/ import.meta.url;
export const __webpack_ids__ = [
"355"
];
export const __webpack_modules__ = {
"./src/utils/error.ts": function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.d(__webpack_exports__, {
parseErrorStacktrace: ()=>parseErrorStacktrace,
printError: ()=>printError
});
var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("fs");
var _jridgewell_trace_mapping__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.29/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs");
var stacktrace_parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../../node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js");
var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/utils/index.ts");
async function printError(error, getSourcemap, rootPath) {
const errorName = error.name || 'Unknown Error';
if (error.message.includes('Vitest failed to access its internal state')) {
const tips = [
'Error: not support import `vitest` in Rstest test environment.\n',
'Solution:',
` - Update your code to use imports from "${_utils__WEBPACK_IMPORTED_MODULE_3__.$_.yellow('@rstest/core')}" instead of "${_utils__WEBPACK_IMPORTED_MODULE_3__.$_.yellow('vitest')}".`,
' - Enable `globals` configuration and use global API.'
];
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log(`${_utils__WEBPACK_IMPORTED_MODULE_3__.$_.red(tips.join('\n'))}\n`);
return;
}
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log(`${_utils__WEBPACK_IMPORTED_MODULE_3__.$_.red(_utils__WEBPACK_IMPORTED_MODULE_3__.$_.bold(errorName))}${_utils__WEBPACK_IMPORTED_MODULE_3__.$_.red(`: ${error.message}`)}\n`);
if (error.diff) {
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log(error.diff);
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log();
}
if (error.stack) {
const stackFrames = await parseErrorStacktrace({
stack: error.stack,
fullStack: error.fullStack,
getSourcemap
});
if (stackFrames[0]) await printCodeFrame(stackFrames[0]);
printStack(stackFrames, rootPath);
}
}
async function printCodeFrame(frame) {
const filePath = frame.file?.startsWith('file') ? new URL(frame.file) : frame.file;
if (!filePath) return;
const source = node_fs__WEBPACK_IMPORTED_MODULE_0__["default"].existsSync(filePath) ? node_fs__WEBPACK_IMPORTED_MODULE_0__["default"].readFileSync(filePath, 'utf-8') : void 0;
if (!source) return;
const { codeFrameColumns } = await __webpack_require__.e("72").then(__webpack_require__.bind(__webpack_require__, "../../node_modules/.pnpm/@babel+code-frame@7.27.1/node_modules/@babel/code-frame/lib/index.js"));
const result = codeFrameColumns(source, {
start: {
line: frame.lineNumber,
column: frame.column
}
}, {
highlightCode: true,
linesBelow: 2
});
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log(result);
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log('');
}
function printStack(stackFrames, rootPath) {
for (const frame of stackFrames){
const msg = '<unknown>' !== frame.methodName ? `at ${frame.methodName} (${(0, _utils__WEBPACK_IMPORTED_MODULE_3__.Ps)(rootPath, frame.file)}:${frame.lineNumber}:${frame.column})` : `at ${(0, _utils__WEBPACK_IMPORTED_MODULE_3__.Ps)(rootPath, frame.file)}:${frame.lineNumber}:${frame.column}`;
_utils__WEBPACK_IMPORTED_MODULE_3__.kg.log(_utils__WEBPACK_IMPORTED_MODULE_3__.$_.gray(` ${msg}`));
}
stackFrames.length && _utils__WEBPACK_IMPORTED_MODULE_3__.kg.log();
}
const stackIgnores = [
/\/@rstest\/core/,
/rstest\/packages\/core\/dist/,
/node_modules\/tinypool/,
/node_modules\/chai/,
/node_modules\/@vitest\/expect/,
/node_modules\/@vitest\/snapshot/,
/node:\w+/,
/webpack\/runtime/,
/webpack\\runtime/,
'<anonymous>'
];
async function parseErrorStacktrace({ stack, getSourcemap, fullStack }) {
return Promise.all((0, stacktrace_parser__WEBPACK_IMPORTED_MODULE_2__.Q)(stack).filter((frame)=>fullStack ? true : frame.file && !stackIgnores.some((entry)=>frame.file?.match(entry))).map(async (frame)=>{
const sourcemap = getSourcemap(frame.file);
if (sourcemap) {
const traceMap = new _jridgewell_trace_mapping__WEBPACK_IMPORTED_MODULE_1__.s7(sourcemap);
const { line, column, source, name } = (0, _jridgewell_trace_mapping__WEBPACK_IMPORTED_MODULE_1__.Sk)(traceMap, {
line: frame.lineNumber,
column: frame.column
});
if (!source) return null;
return {
...frame,
file: source,
lineNumber: line,
name,
column
};
}
return frame;
})).then((frames)=>frames.filter((frame)=>null !== frame));
}
}
};