62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
declare global {
|
|
var viteErrors: any[];
|
|
}
|
|
|
|
// Initialize global viteErrors array if it doesn't exist
|
|
if (!global.viteErrors) {
|
|
global.viteErrors = [];
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { error, file, type = 'runtime-error' } = await request.json();
|
|
|
|
if (!error) {
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: 'Error message is required'
|
|
}, { status: 400 });
|
|
}
|
|
|
|
// Parse the error to extract useful information
|
|
const errorObj: any = {
|
|
type,
|
|
message: error,
|
|
file: file || 'unknown',
|
|
timestamp: new Date().toISOString()
|
|
};
|
|
|
|
// Extract import information if it's an import error
|
|
const importMatch = error.match(/Failed to resolve import ['"]([^'"]+)['"] from ['"]([^'"]+)['"]/);
|
|
if (importMatch) {
|
|
errorObj.type = 'import-error';
|
|
errorObj.import = importMatch[1];
|
|
errorObj.file = importMatch[2];
|
|
}
|
|
|
|
// Add to global errors array
|
|
global.viteErrors.push(errorObj);
|
|
|
|
// Keep only last 50 errors
|
|
if (global.viteErrors.length > 50) {
|
|
global.viteErrors = global.viteErrors.slice(-50);
|
|
}
|
|
|
|
console.log('[report-vite-error] Error reported:', errorObj);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Error reported successfully',
|
|
error: errorObj
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('[report-vite-error] Error:', error);
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: (error as Error).message
|
|
}, { status: 500 });
|
|
}
|
|
} |