Refactoring javascript executor scripts.main error handling

This commit is contained in:
2022-11-09 10:36:37 -06:00
parent e701ae0ea3
commit 230dde2e52
2 changed files with 32 additions and 2 deletions

View File

@ -90,14 +90,20 @@ public class QJavaScriptExecutor implements QCodeExecutor
{ {
%s %s
var mainFunction = null;
try try
{ {
if(script && script.main) if(script && script.main && typeof script.main == "function")
{ {
return (script.main()); mainFunction = script.main;
} }
} }
catch(e) { } catch(e) { }
if(mainFunction != null)
{
return (mainFunction());
}
})(); })();
""".formatted(code); """.formatted(code);

View File

@ -35,6 +35,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeUsage;
import com.kingsrook.qqq.backend.core.model.session.QSession; import com.kingsrook.qqq.backend.core.model.session.QSession;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test; 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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue; 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");
}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/