MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

improve error message summary

+71 -46
+1 -1
docs/reports/public/assets/report.css
··· 18 18 19 19 body { 20 20 margin: 7% auto 0; 21 - max-width: 400px; 21 + max-width: 405px; 22 22 min-height: 180px; 23 23 padding: 30px 0 15px; 24 24 }
+70 -45
docs/reports/src/view.tsx
··· 8 8 return `${value}b`; 9 9 } 10 10 11 + function crashDetail(code: string): string { 12 + switch (code) { 13 + case 'SIGSEGV': 14 + case 'EXCEPTION_ACCESS_VIOLATION': 15 + return 'Invalid memory access'; 16 + case 'SIGBUS': 17 + return 'Bus error'; 18 + case 'SIGFPE': 19 + return 'Floating point exception'; 20 + case 'SIGILL': 21 + case 'EXCEPTION_ILLEGAL_INSTRUCTION': 22 + return 'Illegal instruction'; 23 + case 'SIGABRT': 24 + return 'Abort'; 25 + case 'EXCEPTION_STACK_OVERFLOW': 26 + return 'Stack overflow'; 27 + default: 28 + return 'Fatal error'; 29 + } 30 + } 31 + 11 32 const Shell = ({ title, children }: { title: string; children: Child }) => ( 12 33 <html lang="en"> 13 34 <head> ··· 37 58 </Shell> 38 59 ); 39 60 40 - const ReportPage = ({ report, url }: { report: CrashReport; url: string }) => ( 41 - <Shell title={`${report.reason} at ${report.addr}`}> 42 - <Logo /> 43 - <p> 44 - <b>{report.reason}.</b>{' '} 45 - <ins> 46 - {report.code} at {report.addr} 47 - </ins> 48 - <br /> 49 - <span>Ant crashed and sent a redacted report.</span> 50 - </p> 61 + const ReportPage = ({ report, url }: { report: CrashReport; url: string }) => { 62 + const detail = crashDetail(report.code); 51 63 52 - <div class="meta"> 64 + return ( 65 + <Shell title={`Ant crash report | ${detail}`}> 66 + <Logo /> 53 67 <p> 54 - <span class="label">Runtime:</span> Ant {report.version} 68 + <b>{report.reason}.</b>{' '} 69 + <ins> 70 + {detail} at {report.addr} 71 + </ins> 72 + <br /> 73 + <span>Ant crashed and sent a redacted report.</span> 55 74 </p> 56 - <p> 57 - <span class="label">Platform:</span> {report.os} {report.arch} 58 - </p> 59 - <p> 60 - <span class="label">Target:</span> <code>{report.target}</code> 61 - </p> 62 - <p> 63 - <span class="label">Elapsed:</span> {report.elapsedMs ?? 'unknown'}ms 64 - </p> 65 - <p> 66 - <span class="label">Peak RSS:</span> {formatBytes(report.peakRss)} 67 - </p> 68 - </div> 75 + 76 + <div class="meta"> 77 + <p> 78 + <span class="label">Runtime:</span> Ant {report.version} 79 + </p> 80 + <p> 81 + <span class="label">Platform:</span> {report.os} {report.arch} 82 + </p> 83 + <p> 84 + <span class="label">Target:</span> <code>{report.target}</code> 85 + </p> 86 + <p> 87 + <span class="label">Elapsed:</span> {report.elapsedMs ?? 'unknown'}ms 88 + </p> 89 + <p> 90 + <span class="label">Peak RSS:</span> {formatBytes(report.peakRss)} 91 + </p> 92 + </div> 69 93 70 - <div class="meta"> 71 - <i>Native backtrace:</i> 72 - <ol class="frames"> 73 - {report.frames.length ? ( 74 - report.frames.map(frame => ( 94 + <div class="meta"> 95 + <i>Native backtrace:</i> 96 + <ol class="frames"> 97 + {report.frames.length ? ( 98 + report.frames.map(frame => ( 99 + <li> 100 + <code>{frame}</code> 101 + </li> 102 + )) 103 + ) : ( 75 104 <li> 76 - <code>{frame}</code> 105 + <ins>No native frames were captured.</ins> 77 106 </li> 78 - )) 79 - ) : ( 80 - <li> 81 - <ins>No native frames were captured.</ins> 82 - </li> 83 - )} 84 - </ol> 85 - </div> 107 + )} 108 + </ol> 109 + </div> 86 110 87 - <p class="url"> 88 - <span class="label">This report URL:</span> <a href={url}>{url}</a> 89 - </p> 90 - </Shell> 91 - ); 111 + <p class="url"> 112 + <span class="label">This report URL:</span> <a href={url}>{url}</a> 113 + </p> 114 + </Shell> 115 + ); 116 + }; 92 117 93 118 export function renderBlank(): string { 94 119 return `<!doctype html>${(<BlankPage />)}`;