@@ -702,13 +702,34 @@ class ChallengeViewModel extends BaseViewModel {
702702 _userConsoleMessages = [];
703703 setTestConsoleMessages = ['<p>// running tests</p>' ];
704704
705- // Get user code console messages
705+ String userCode;
706+ try {
707+ userCode = await builder.buildUserCode (
708+ challenge! ,
709+ _babelWebView.webViewController,
710+ );
711+ } catch (e) {
712+ String errorMessage = e.toString ();
713+ if (errorMessage.contains ('Babel transpilation failed' )) {
714+ errorMessage = errorMessage.replaceFirst ('Exception: ' , '' );
715+ }
716+ String userFriendlyMessage = parseSyntaxError (errorMessage);
717+
718+ setPanelType = PanelType .hint;
719+ setHint = '<p>$userFriendlyMessage </p>' ;
720+ setTestConsoleMessages = [
721+ ...testConsoleMessages,
722+ '<p>$userFriendlyMessage </p>' ,
723+ '<p>// tests completed</p>' ,
724+ ];
725+ setIsRunningTests = false ;
726+ _scaffoldKey.currentState? .openEndDrawer ();
727+ return ;
728+ }
729+
706730 if ([1 , 26 , 28 ].contains (challenge! .challengeType)) {
707731 final evalResult = await testController! .callAsyncJavaScript (
708- functionBody: await builder.buildUserCode (
709- challenge! ,
710- _babelWebView.webViewController,
711- ),
732+ functionBody: userCode,
712733 );
713734 if (evalResult != null && evalResult.error != null ) {
714735 setUserConsoleMessages = [
@@ -724,10 +745,7 @@ class ChallengeViewModel extends BaseViewModel {
724745 final updateTestRunnerRes = await testController! .callAsyncJavaScript (
725746 functionBody: ScriptBuilder .runnerScript,
726747 arguments: {
727- 'userCode' : await builder.buildUserCode (
728- challenge! ,
729- _babelWebView.webViewController,
730- ),
748+ 'userCode' : userCode,
731749 'workerType' : builder.getWorkerType (challenge! .challengeType),
732750 'combinedCode' : await builder.combinedCode (challenge! ),
733751 'editableRegionContent' : editableRegionContent,
0 commit comments