@@ -57,27 +57,67 @@ for (const [key, value] of Object.entries(processedArgs)) {
5757}
5858
5959async function run ( ) {
60+ console . log ( openUrl . href ) ;
6061 const browser = await puppeteer . launch ( {
6162 headless : openUrl . searchParams . has ( 'headless' ) ? 'new' : false ,
6263 } ) ;
6364 const page = await browser . newPage ( ) ;
65+ let hasExited = false ;
66+ let exitCode = - 1 ;
67+ const onClose = async ( ) => {
68+ await browser . close ( ) ;
69+ await server . server . close ( ) ;
70+ } ;
6471
6572 const consoleListener = setupConsoleListener ( page ) ;
66- page . on ( 'console' , e => {
73+ page . on ( 'pageerror' , e => {
74+ process . stderr . write ( e . toString ( ) ) ;
75+ process . stderr . write ( e . stack ) ;
76+ process . stderr . write ( '\n' ) ;
77+ hasExited = true ;
78+ } ) ;
79+
80+ page . on ( 'console' , async ( e ) => {
6781 const type = e . type ( ) ;
82+ const args = await Promise . all ( e . args ( ) . map ( arg => page . evaluate ( arg => {
83+ if ( arg instanceof Error ) {
84+ return arg . message + '\n' + arg . stack ;
85+ }
86+ return arg ;
87+ } , arg ) . catch ( ( e ) => {
88+ console . error ( 'error in run_web_version.js' , e ) ;
89+ return '???' ;
90+ } ) ) ) ;
91+ const text = args . join ( ' ' ) ;
92+
6893 if ( type === 'error' || type === 'warning' ) {
69- console . error ( e . text ( ) ) ;
94+ process . stderr . write ( text ) ;
95+ process . stderr . write ( '\n' ) ;
7096 } else {
71- console . log ( e . text ( ) ) ;
97+ process . stdout . write ( text ) ;
98+ process . stdout . write ( '\n' ) ;
99+ }
100+
101+ const bad = [
102+ 'worker sent an error' ,
103+ 'ERR_BLOCKED_BY_RESPONSE' ,
104+ 'ERR_CONNECTION_RESET' ,
105+ // shutdown_timers
106+ // failed: _al_vector_size(&active_timers) == 0, at: /Users/connorclark/code/ZeldaClassic-secondary/build_emscripten/_deps/allegro5-src/src/timernu.c,146,shutdown_timers
107+ 'Uncaught RuntimeError' ,
108+ 'Aborted(native code called abort())' ,
109+ 'Assert failed' ,
110+ ] ;
111+ if ( bad . some ( t => text . includes ( t ) ) ) {
112+ onClose ( ) ;
113+ process . exit ( 1 ) ;
72114 }
73115 } ) ;
74116
75117 await page . goto ( openUrl , {
76118 waitUntil : 'networkidle2' ,
77119 } ) ;
78120
79- let hasExited = false ;
80- let exitCode = - 1 ;
81121 consoleListener . waitFor ( / e x i t w i t h c o d e : / ) . then ( text => {
82122 hasExited = true ;
83123 exitCode = Number ( text . replace ( 'exit with code:' , '' ) ) ;
@@ -96,8 +136,7 @@ async function run() {
96136 console . log ( allegroLog ) ;
97137 }
98138
99- await browser . close ( ) ;
100- await server . server . close ( ) ;
139+ await onClose ( ) ;
101140
102141 return exitCode ;
103142}
0 commit comments