From 230dde2e52ea9ee20af85ab37995f6d450206497 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 9 Nov 2022 10:36:37 -0600 Subject: [PATCH] Refactoring javascript executor scripts.main error handling --- .../javascript/QJavaScriptExecutor.java | 10 ++++++-- .../javascript/ExecuteCodeActionTest.java | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/qqq-language-support-javascript/src/main/java/com/kingsrook/qqq/languages/javascript/QJavaScriptExecutor.java b/qqq-language-support-javascript/src/main/java/com/kingsrook/qqq/languages/javascript/QJavaScriptExecutor.java index b1116f3c..15f7ac98 100644 --- a/qqq-language-support-javascript/src/main/java/com/kingsrook/qqq/languages/javascript/QJavaScriptExecutor.java +++ b/qqq-language-support-javascript/src/main/java/com/kingsrook/qqq/languages/javascript/QJavaScriptExecutor.java @@ -90,14 +90,20 @@ public class QJavaScriptExecutor implements QCodeExecutor { %s + var mainFunction = null; try { - if(script && script.main) + if(script && script.main && typeof script.main == "function") { - return (script.main()); + mainFunction = script.main; } } catch(e) { } + + if(mainFunction != null) + { + return (mainFunction()); + } })(); """.formatted(code); diff --git a/qqq-language-support-javascript/src/test/java/com/kingsrook/qqq/languages/javascript/ExecuteCodeActionTest.java b/qqq-language-support-javascript/src/test/java/com/kingsrook/qqq/languages/javascript/ExecuteCodeActionTest.java index b9920dde..7d4cd145 100644 --- a/qqq-language-support-javascript/src/test/java/com/kingsrook/qqq/languages/javascript/ExecuteCodeActionTest.java +++ b/qqq-language-support-javascript/src/test/java/com/kingsrook/qqq/languages/javascript/ExecuteCodeActionTest.java @@ -35,6 +35,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeUsage; import com.kingsrook.qqq.backend.core.model.session.QSession; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -123,6 +124,29 @@ class ExecuteCodeActionTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testCompiledFromTypeScriptThatThrows() throws QException + { + assertThatThrownBy(() -> + { + testOne(4, """ + var script = (function (exports) { + function main() { + throw "inline script failure"; + return (output); + } + exports.main = main; + return exports; + })({}); + """); + }).hasMessageContaining("inline script failure"); + } + + + /******************************************************************************* ** *******************************************************************************/